哪种Python语言规则允许首先找到描述符?

dmw*_*dmw 2 python rules

我昨晚碰到了下面的内容,我仍然无法解释它:

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

f = Foo()
print f.dave
print f.dave
Run Code Online (Sandbox Code Playgroud)

运行此代码会产生:

2
2
Run Code Online (Sandbox Code Playgroud)

问题是为什么?我对属性访问的理解是在类字典之前检查实例字典,并且任何基础的字典,但是如上面所见,实例字典似乎没有在类字典中找到描述符之前被检查.

Mil*_*les 5

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

数据描述符是一个例外:

对于实例绑定,描述符调用的优先级取决于定义的描述符方法.通常情况下,数据描述符同时定义__get__()__set__(),非数据描述符刚才的__get__()方法.数据描述符总是覆盖实例字典中的重新定义.相反,非数据描述符可以被实例覆盖.

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