关于python3面向对象里的getter和setter
python3 面向对象 最近看一份python的代码,发现里面有@property 一脸懵逼,我果然很菜,然后学习了一下关于python里的访问器和修改器。
class Person(object):
def __init__(self, name, age):
self._name = name
self._age = age
# 访问器 - getter方法
@property
def name(self):
return self._name
# 访问器 - getter方法
@property
def age(self):
return self._age
# 修改器 - setter方法
@age.setter
def age(self, age):
self._age = age
def play(self):
if self._age < 18:
print('%s 未成年' % self._name)
else:
print('%s成年' % self._name)def main():
person = Person('张三', 16)
person.play()
person.age = 22
person.play()if __name__ == '__main__':
main()
【关于python3面向对象里的getter和setter】当时就是看不懂,类里面本来就没有age这个变量,为什么main函数里面有这种赋值。
其实装饰器@property是将一个方法变成属性来使用,而@property又会创建另一个装饰器@age.setter,它负责把一个setter方法变成属性来赋值。
这和我直接赋值_age有什么区别呢,其实这可以为age确立一个范围,我们可以在setter里,限制一个人的岁数不小于0岁。这样属性就不会直接暴露在类外,相当于做了封装。如果想要设置属性只读,只需要不写setter的装饰器就好了。
推荐阅读
- 关于QueryWrapper|关于QueryWrapper,实现MybatisPlus多表关联查询方式
- 四首关于旅行记忆的外文歌曲
- 醒不来的梦
- 关于自我为中心的一点感想
- 「按键精灵安卓版」关于全分辨率脚本的一些理解(非游戏app)
- 关于Ruby的杂想
- 关于读书的思考
- 关于this的一些问题(1)
- 《声之形》
- 关于如何沟通的1/2/3