Python 知识记录之神奇的@property装饰器
Python 神奇的@property装饰器
最近接触到了Python的property装饰器,它可以将类方法作为类属性使用,相当神奇。
举例:
1 class PropertyTest(object): 2 3 def __init__(self): 4 self.__name = 'My name' 5 6 @property 7 def prop(self): 8 return self.__name 9 10 @prop.setter 11 def prop(self,value): 12 self.__name = value 13 14 15 if __name__ == '__main__': 16 17 ProT = PropertyTest() 18 temp = ProT.prop 19 print('PropertyTest的私有属性值为:'+temp) 20 ProT.prop = 'Li lei' 21 temp = ProT.prop 22 print('PropertyTest的私有属性值为:' + temp)
两个print()输出的结果为:
PropertyTest的私有属性值为:My name
PropertyTest的私有属性值为:Li lei
从上面的例子可以得出结论,
1、在使用@property装饰器之后,可以使用 类.方法名 不带括号的方式获取其返回值(必须存在的),但是 @property 装饰的函数,不能附带除self之外的其他参数;
2、在使用@prop.setter装饰器后,可以使用 类.方法名 来进行赋值,但是@prop.setter 装饰的函数,只能有除了self之外的一个参数。
我在手写这份代码的时候遇到一个坑:
在定义方法名字的时候,把@prop.setter所装饰的函数,没有与@propperty所装饰的函数名称一致,导致在给 ProT.prop 赋值的时候报错。
后来百度搜了一下才注意到,这两个装饰器的函数名必须一致。