property函数不是一个真正的函数,它实际上是一个拥有很多特殊方法的类.在python的文档中property的定义为:
class property([fget[, fset[, fdel[, doc]]]]),它返回一个新式类的属性,fget是返回属性值的函数,fset是设置属性值的函数.fdel是一个删除属性值函数.doc为属性产生文档字符串.
property的一个典型应用时用来定义一个被管理属性
class C(object):
def __init__(self):
self._x = None
def getx(self):
return self._x
def setx(self, value):
self._x = value
def delx(self):
del self._x
x = property(getx, setx, delx, "I'm the 'x' property.")
如果c是C的实例,c.x将会调用getter,c.x = value将会调用setter,del c.x会调用deleter.如果给了doc参数,那么doc是该属性的文档字符串,否则,property将会拷贝fget函数的文档字符串(如果存在)
由测试结果,完全符合上述说法.
把property()函数当做装饰器使用很容易创建一个只读属性.
看下面的例子:
class Parrot(object):
def __init__(self):
self.__x = 10000
@property
def x(self):
return self.__x
程序执行结果: