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 赋值的时候报错。

后来百度搜了一下才注意到,这两个装饰器的函数名必须一致

 

posted @ 2019-03-15 10:48  艾鱼  阅读(213)  评论(0编辑  收藏  举报