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
#输出:不能删除
posted @ 2025-09-08 20:33  bokebanla  阅读(5)  评论(0)    收藏  举报