昨晚我碰到了下面的内容,我仍然不知所措,以解释它:
class Foo(object):
@property
def dave(self):
vars(self)['dave'] = 1
return 2
f = Foo()
print f.dave
print f.dave
运行此代码会产生:
2
2
问题是为什么?我对属性访问的理解是在类字典之前检查实例字典,并且在类字典中找到描述符之前,实际字典上面看到实例字典的字典。 / p>
答案 0 :(得分:5)
我对属性访问的理解是在类字典和任何基础的字典之前检查实例字典
数据描述符是一个例外:
对于实例绑定,描述符调用的优先级取决于定义的描述符方法。通常,数据描述符定义
__get__()
和__set__()
,而非数据描述符只有__get__()
方法。数据描述符总是覆盖实例字典中的重新定义。相反,非数据描述符可以被实例覆盖。http://docs.python.org/reference/datamodel.html#invoking-descriptors