python中 property的定义是这样的
property ( [ fget [, fset [, fdel [, doc ] ] ] ] )
fget 是一个方法获得属性的值,fset是一个方法给属性赋值,fdel是一个方法删除属性的值,典型的使用是定义一个管理属性x:就像下面这样
如果c是C的一个实例,c.x将会调用getter, c.x=value 将会调用setter 并且 del c.x 将会调用 deleterclass 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.")
下面是python的官方解释
-
property
(
[
fget
[,
fset
[,
fdel
[,
doc
]
]
]
]
)
-
Return a property attribute for new-style classes (classes that derive fromobject).
fget is a function for getting an attribute value, likewise fset is a function for setting, andfdel a function for del’ing, an attribute. Typical use is to define a managed attributex:
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.")
If then c is an instance of C, c.x will invoke the getter, c.x= value will invoke the setter anddel c.x the deleter.
If given, doc will be the docstring of the property attribute. Otherwise, the property will copyfget‘s docstring (if it exists). This makes it possible to create read-only properties easily usingproperty() as adecorator:
class Parrot(object): def __init__(self): self._voltage = 100000 @property def voltage(self): """Get the current voltage.""" return self._voltage
turns the voltage() method into a “getter” for a read-only attribute with the same name.
A property object has getter,setter, and deleter methods usable as decorators that create a copy of the property with the corresponding accessor function set to the decorated function. This is best explained with an example:
class C(object): def __init__(self): self._x = None @property def x(self): """I'm the 'x' property.""" return self._x @x.setter def x(self, value): self._x = value @x.deleter def x(self): del self._x
This code is exactly equivalent to the first example. Be sure to give the additional functions the same name as the original property (x in this case.)
The returned property also has the attributes fget,fset, and fdel corresponding to the constructor arguments.
New in version 2.2.
Changed in version 2.5: Use fget‘s docstring if no doc given.
Changed in version 2.6: The getter, setter, anddeleter attributes were added.