2013-02-21 2 views

ответ

2

Само свойство объект в 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