Python 学习笔记property

来源:互联网 发布:网络销售平台搭建方案 编辑:程序博客网 时间:2024/06/05 18:57

python中 property的定义是这样的 

property([fget[,fset[,fdel[,doc]]]])

fget 是一个方法获得属性的值,fset是一个方法给属性赋值,fdel是一个方法删除属性的值,典型的使用是定义一个管理属性x:就像下面这样

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

下面是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 anddelc.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, anddeleter 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, andfdel 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.


0 0