Само свойство объект в Person.__dict__
:
In [16]: Person.__dict__
Out[16]: dict_proxy({'__module__': '__main__', 'age': <property object at 0xa387c0c>, '__dict__': <attribute '__dict__' of 'Person' objects>, '__weakref__': <attribute '__weakref__' of 'Person' objects>, '__doc__': None, '__init__': <function __init__ at 0xa4d66f4>})
a.age
является возвращаемым значением вызова функции. Он использует descriptor lookup mechanism для звонка Person.__dict__['age'].__get__(a,Person)
.
Python не сохраняет {'age':28}
в любом __dict__
, так как 28 необязательно является фиксированным значением. Эта функция, по-видимому, могла бы возвращать другое значение при каждом вызове. Поэтому было бы бессмысленно связывать 'age'
с одним возвратным значением.
Рассмотрим, например,
class Person(object):
def __init__(self):
self.count = 0
@property
def age(self):
self.count += 1
return self.count
a = Person()
print(a.age)
# 1
print(a.age)
# 2