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

哪种Python语言规则允许首先找到描述符?,python,rules,Python,Rules,我昨晚偶然发现了以下内容,但我仍然无法解释: class Foo(object): @property def dave(self): vars(self)['dave'] = 1 return 2 f = Foo() print f.dave print f.dave 运行此代码会产生: 2 2 问题是为什么?我对属性访问的理解是,在类字典之前检查实例字典,并且检查任何基的字典,但是如上所示,在类字典中找到描述符之前,似乎没有检查实例字典

我昨晚偶然发现了以下内容,但我仍然无法解释:

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

f = Foo()
print f.dave
print f.dave
运行此代码会产生:

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

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

数据描述符是一个例外:

对于实例绑定,描述符调用的优先级取决于定义的描述符方法。通常,数据描述符同时定义
\uuuuu get\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu()
,而非数据描述符只有
\u。数据描述符总是覆盖实例字典中的重新定义。相反,非数据描述符可以被实例覆盖


谢谢我发誓我之前已经试过了。:)我猜在我还没弄清楚的封面下面有魔法在起作用。@David Wilson:没有魔法。但是当你试图将一个方法函数作为一个更新自身的属性时,你做的事情太复杂了。也许如果你对函数和属性使用不同的名称,你会发现没有魔法。