博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
3.1.8 property装饰器
阅读量:4560 次
发布时间:2019-06-08

本文共 1558 字,大约阅读时间需要 5 分钟。

在类的方法上加上一行@property 装饰器,会使得用户调用该函数属性时,就像调用数据属性一样,不需要加上()

比如想获取一些名词,再加上括号,容易使调用者忘记。动词才加()调用方法.

 

如下示例:

'''

BMI指数(bmi是计算而来的,但很明显它听起来像是一个属性而非方法,如果我们将其做成一个属性,更便于理解)

成人的BMI数值:

过轻:低于18.5

正常:18.5-23.9

过重:24-27

肥胖:28-32

非常肥胖, 高于32

体质指数(BMI)=体重(kg)÷身高^2(m)

EX:70kg÷(1.75×1.75)=22.86

'''

class People:    def __init__(self,name,weight,height):        self.name=name        self.weight=weight        self.height=height    @property    def bmi(self):        return self.weight / (self.height ** 2)p=People('egon',75,1.81)# p.bmi=p.weight / (p.height ** 2)# print(p.bmi)  #使用数据属性不需要加()## print(p.bmi())   #没加@property装饰器时,调用p.bmi()是需要加括号的# print(p.bmi)   #加上@property装饰器后,调用p.bmi()可以不加括号。# p.height=1.82# print(p.bmi)   #p.bmi值会随着height的变化而变化。p.bmi=3333 #报错AttributeError: can't set attribute

  

以下是需要了解的内容:

要怎么才能修改被@property装饰的属性呢?  

@name.setter  @name.deleter   name是被@property修饰过的方法名

设置name时触发setter 

删除name时触发deleter

getname时@property

 

class People:    def __init__(self,name):        self.__name=name    @property    def name(self):        # print('getter')  #p.name时触发该方法        return self.__name    @name.setter    def name(self,val):    #p.name = 'EGON' 时触发该方法        # print('setter',val)          if not isinstance(val,str):            print('名字必须是字符串类型')            return        self.__name=val    @name.deleter    def name(self):    # del p.name时触发该方法        print('deleter')        print('不允许删除')p=People('egon')# print(p.get_name())# print(p.name)# p.name# p.name='EGON'# p.name=123# print(p.name)del p.name

  

 

转载于:https://www.cnblogs.com/beallaliu/p/9114159.html

你可能感兴趣的文章
jQuery 选择器
查看>>
Java IDE 编辑器 --- IntelliJ IDEA 进阶篇 生成 hibernate 实体与映射文件
查看>>
关于C# XML序列化的一个BUG的修改
查看>>
Html5 舞动的雨伞
查看>>
快速构建Windows 8风格应用1-开发工具安装及模拟器使用
查看>>
Windows Phone 如果你把Pivot控件当成主页面,那么这篇文章你值得看。
查看>>
C#图像处理(各种旋转、改变大小、柔化、锐化、雾化、底片、浮雕、黑白、滤镜效果)...
查看>>
winform屏幕截图
查看>>
.NET(C#):XML序列化时派生类的处理
查看>>
sass学习笔记-输出方法
查看>>
Python之禅
查看>>
MongoDB分片集群配置实例
查看>>
mac 开启ntfs 权限
查看>>
laraval开发之QQ登录及QQ报错
查看>>
hibernate中的dialect解释
查看>>
基功太差,怨不得天,得下苦功——WAP面试,正式招聘号角响起
查看>>
resin4开启jmx
查看>>
Spring Boot+Mybatis+Pagehelper分页
查看>>
jsvc 启动java 在linux下的实现原理
查看>>
Ubuntu创建新用户并增加管理员权限
查看>>