代码改变世界

property

2018-08-07 10:49  冻奶香甜玉米片  阅读(144)  评论(0编辑  收藏  举报

把函数属性封装成数据属性,让调用者感觉不出是使用了方法(因为没有括号)

把通过计算得出的结果封装为数据属性,使用户访问不用加()

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.bmi,不用p.bmi()

之所以不定义为对象的属性,是因为写在__init__里,bmi会变成定值,即使以后修改身高,体重,bmi也不会改变了

还有@.setter 和@ .deleter (.前面的是被property装饰的函数)

这样在赋值操作时就会触发@.setter 

del时就会触发@ .deleter 

对象添加key直接 对象.newkey = val