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