@property动态属性
from datetime import date, datetime
class User:
def __init__(self, name, birthday):
self.name = name
self.birthday = birthday
# @property 在给属性赋值时可以通过函数加入自定义的逻辑
@property
def name(self):
# 前面增加下划线表示这个属性不想对外暴露,只能通过属性描述符进行访问
# 这仅仅是代码规范,仍然可以通过 user._age 的方式访问
return self._name + "·不良人"
# 可以通过赋值加入自动移的逻辑
@name.setter
def name(self, name):
self._name = name
# 也可以将自动计算的逻辑变成 User 的属性
@property
def age(self):
return datetime.now().year - self.birthday.year
# 给一个不存在的属性赋值
@age.setter
def age(self, age):
self._age = age
user = User('lixingyun', date(year=1990, month=1, day=1))
print(user.name) # lixingyun·不良人
print(user.age) # 34
user.name = 'wanglin' # wanglin·不良人
print(user.name)
# 直接赋值 _age
user._age = 22
print(user._age) # 22
大约 7 分钟