Python运算符重载属性装饰器?

时间:2014-01-05 23:41:41

标签: python getter-setter python-decorators

我正在查看此Python Doc页面:

http://docs.python.org/2/library/functions.html#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.")

正下方说:

If then c is an instance of C, c.x will invoke the getter, c.x = value will invoke the setter and del c.x the deleter.

对我来说,c.x = value看起来像是为函数赋值,因为c.x是一个函数,除非“=”运算符被重载。这是在发生什么事吗?

与del c.x相同

感谢。

1 个答案:

答案 0 :(得分:3)

property是一个描述符,它改变了Python处理属性访问的方式。 Python文档有article introducing descriptors

当Python访问使用__get__方法指向对象的属性时,它将返回该方法返回的内容而不是对象本身。同样,=会将__set__del委托给__delete__the docs中描述了特殊方法。