@property可以将python定义的函数“当做”属性访问,从而提供更加友好访问方式,但是有时候setter/deleter也是需要的。
1》只有@property表示只读。
2》同时有@property和@x.setter表示可读可写。
3》同时有@property和@x.setter和@x.deleter表示可读可写可删除。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 |
# -*- coding: utf-8 -*- """ @Time: 2018/4/30 @Author: songhao @微信公众号: zeropython @File: demo_property.py """ 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 动态属性值 """ @property def age(self): return self.get_age() """赋值""" @age.setter def age(self, value): self._age = value @age.deleter def age(self): del self._age if __name__ == '__main__': user = User("songhao", date(year=1989, month=10, day=20)) print(user.get_age()) user.age = 1000 print(user._age) del user.age print(user._age) # print(user.age) |
输出结果:

