python property使用示例,pythonproperty,假设类的某属性,你不愿意


假设类的某属性,你不愿意它被悄悄地访问或改写了,希望它被访问、赋值或删除时会得到一些通知,那么我们可以使用函数property()。参数原型是:property([fget[, fset[, fdel[, doc]]]])它返回新式类(继承了object的类)的一个属性,其中:fget是属性被访问时执行的方法,fset:属性被赋值时执行的方法,fdel:属性被删除时执行的方法。

代码实例如下:

class C(object):    def __init__(self):        self._x = None    def getx(self):        print "You get my x."        return self._x    def setx(self, value):        print "You set my x."        self._x = value    def delx(self):        print "You del my x."        del self._x    x = property(getx, setx, delx)if __name__ == "__main__":    c = C()    c.x = 10    print c.x    del c.x

执行结果:

    You set my x.    You get my x.    10    You del my x. 

可见,在访问对象属性x的时候, 对应执行了property(getx, setx, delx) 所指定方法而做出一些额外的事情。另外,python提供了一个property的装饰器,上述代码 x = property([fget[, fset[, fdel[, doc]]]])可以被分化,代码如下:

class C(object):    def __init__(self):        self._x = None    @property    def x(self):        print "You get my x."        return self._x    @x.setter    def x(self,value):        print "You set my x."        self._x = value    @x.deleter        def x(self):        print "You del my x."        del self._xif __name__ == "__main__":    c = C()    c.x = 10    print c.x    del c.x

转载自http://www.yabogo.com/?p=676

评论关闭