python property动态属性
class Foo: def __init__(self): self.name = 'a' def bar(self): print('bar') # 属性/特性 @property #用于执行obj.per(只是一个对应关系,即执行obj.per找到@property下的per方法并执行,至于per方法里面做什么自定义) def per(self): print('123') return 1 @per.setter #用于执行obj.per = 888(只是一个对应关系,即执行obj.per = 888找到@per.setter下的per方法并执行,至于per方法里面做什么自定义) def per(self,val): print(val) @per.deleter #用于执行del obj.per(只是一个对应关系,即执行del obj.per找到@per.deleter下的per方法并执行,至于per方法里面做什么自定义) def per(self): print(666) obj = Foo() #obj.per() #TypeError: 'NoneType' object is not callable r = obj.per #123 print(r) #1 obj.per = 888 #888 del obj.per #666
from datetime import date, datetime class User: def __init__(self, name, birthday): self.name = name self.birthday = birthday self._age = 0 # def get_age(self): # return datetime.now().year - self.birthday.year @property def age(self): return datetime.now().year - self.birthday.year @age.setter def age(self, value): self._age = value if __name__ == "__main__": user = User("bobby", date(year=1987, month=1, day=1)) user.age = 30 # 调用user对象中有@age.setter装饰器的函数age,即执行self._age = value,self._age = 30 print(user._age) # 调用user对象中的_age属性 # 30 print(user.age) # 调用user对象中有@property装饰器的函数age,即执行datetime.now().year - self.birthday.year并返回 # 32