Python之@property属性
@property 可以将python定义的函数“当做”属性访问,从而提供更加友好访问方式,但是有时候setter/getter也是需要的
假设定义了一个类Cls,该类必须继承自object类,有一私有变量__x
1. 第一种使用属性的方法:
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 |
|
运行结果:
set & get y: 100
del c.x & y: 100
在该类中定义三个函数,分别用作赋值、取值、删除变量
property函数原型为property(fget=None,fset=None,fdel=None,doc=None),上例根据自己定义相应的函数赋值即可。
2. 第二种方法(在2.6中新增)
同方法一,首先定义一个类Cls,该类必须继承自object类,有一私有变量__x
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 |
|
运行结果:
set& get y: 100
delc.x & y: 100
说明: 同一属性__x的三个函数名要相同。
3. 第三种方法(类不继承object类)
就不需要setter 等属性,@property只需要read, set, del 方法。
class Parrot:
def __init__(self):
self._voltage =100000
@property
def voltage(self):
"""Get the current voltage."""
returnself._voltage
if __name__ == "__main__":
# instance
p = Parrot()
# similarly invoke"getter" via @property
print p.voltage
# update, similarlyinvoke "setter"
p.voltage = 12
参考:
http://www.2cto.com/kf/201402/278575.html
http://blog.csdn.net/u011148275/article/details/21577613