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
if __name__=="__main__":
user = User('cgy', date(year=1987, month=1, day=1))
user.age
我们之前在设计的时候用了一个age=0这个字段,但是在后期的时候我们在数据库内将这个字段删除了,因为这个字段不适合存于数据库内,这个字段每年都会变动。
我们就把代码中那条self.age=0给注释掉了,但是我们在很多地方都用的user.age,我们如何让user.age这个属性依然能用呢?
这里我们就得用到property了,加上@property这个属性描述符,我们的方法就能像属性一样调用了所以叫属性描述符
快在你自己电脑上敲一下试试吧
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
if __name__=="__main__":
user = User('cgy', date(year=1987, month=1, day=1))
user.age
这里只有get,我们如何set我们的age呢?
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('cgy', date(year=1987, month=1, day=1))
user._age=38
print(user.age)
print(user._age)
输出:
33
38