12.7 类的property/setter/delter特性
12.7 类的property/setter/delter特性
装饰器加到函数上,不能加到属性上
class People():
def __init__(self,height,weight):
self.height=height
self.weight=weight
@property #获取值的时候触发,你不需要加括号使用不能加参数
def bmi(self):
return self.weight/(self.height**2)
@bmi.setter #修改bmi的时候触发,必须加参数
def bmi(self,value):
# raise '不能修改bmi' #抛异常
print('不能修改bmi')
@bmi.deleter #删除时候触发,不需要加参数
def bmi(self):
print('不能删除')
#调用方法不加()
peo=People(1.8,70)
print(peo.bmi) #bmi是方法但是加了property装饰器,就不需要加括号
#输出:21.604938271604937
#修改
peo.bmi=22 #修改时候打印setter
#输出:不能修改bmi
#删除
del peo.bmi
#输出:不能删除