Какое правило языка питона позволяет в первую очередь найти дескриптор?
Вопрос
Я наткнулся на следующую прошлой ночью, и я все еще не могу объяснить это:
class Foo(object):
@property
def dave(self):
vars(self)['dave'] = 1
return 2
f = Foo()
print f.dave
print f.dave
Запуск этого кода производит:
2
2
Вопрос в том, почему? Мое понимание доступа к атрибутам состоит в том, что словарь экземпляров проверяется перед классовым словарем, и словарь каких -либо оснований, однако, как видно выше словаря экземпляра, не проведет проверку до того, как дескриптор будет обнаружен в словаре класса.
Решение
Мое понимание доступа к атрибутам заключается в том, что словарь экземпляров проверяется перед классовым словарем, и словарь любых оснований
Дескрипторы данных являются исключением:
Например, привязки, приоритет вызова дескриптора зависит от того, какие методы дескриптора определены. Обычно дескрипторы данных определяют оба
__get__()
а также__set__()
, в то время как не дата-дескрипторы имеют только__get__()
метод Дескрипторы данных всегда переопределяют переопределение в словаре экземпляра. В отличие от этого, не датины могут быть переопределены экземплярами.http://docs.python.org/reference/datamodel.html#invoking-descriptors