Какое правило языка питона позволяет в первую очередь найти дескриптор?

StackOverflow https://stackoverflow.com/questions/1865902

  •  18-09-2019
  •  | 
  •  

Вопрос

Я наткнулся на следующую прошлой ночью, и я все еще не могу объяснить это:

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top