2

昨晚我遇到了以下问题,但我仍然无法解释:

class Foo(object):
    @property
    def dave(self):
        vars(self)['dave'] = 1
        return 2

f = Foo()
print f.dave
print f.dave

运行此代码会产生:

2
2

问题是为什么?我对属性访问的理解是在类字典之前检查实例字典,以及任何基的字典,但是如上所示,在类字典中找到描述符之前似乎没有检查实例字典。

4

1 回答 1

5

我对属性访问的理解是在类字典之前检查实例字典,以及任何基础的字典

数据描述符是一个例外:

例如绑定,描述符调用的优先级取决于定义的描述符方法。通常,数据描述符定义了__get__()and __set__(),而非数据描述符只有__get__()方法。数据描述符总是覆盖实例字典中的重新定义。相反,非数据描述符可以被实例覆盖。

http://docs.python.org/reference/datamodel.html#invoking-descriptors

于 2009-12-08T10:20:35.683 回答