property装饰器把方法包装成属性,让方法可以以属性的形式被访问和调用。
property 应用场景
1.需要限制对象属性的设置和获取。
2.在设置对象属性的时候添加一些规则校验等。
- 被 @property 装饰的方法是获取属性值的方法,被装饰方法的名字会被用做 属性名。
- 被 @属性名.setter 装饰的方法是设置属性值的方法。
- 被 @属性名.deleter 装饰的方法是删除属性值的方法。
class Dog:
def __init__(self, name):
self._name = name
@property
def name(self):
return self._name
@name.setter
def name(self, name):
self._name = name
if __name__ == '__main__':
d = Dog('tian')
print(d.name)
d.name = 'gao'
print(d.name)
结果:
tian
gao
如果报错 RecursionError: maximum recursion depth exceeded while calling a Python object,很可能是对象属性名和 @property 装饰的方法名重名了,一般会在对象属性名前加一个下划线 _ 避免重名,并且表明这是一个受保护的属性。
如果不设置**@属性名.setter** 装饰的方法,那这个属性就是不可修改的