a.__dict__ を呼び出すと、出力が {name:'rafael',age:28} にならないのはなぜですか?
class Person(object):
def __init__(self):
self.name = 'Rafael'
@property
def age(self):
return 28
a = Person()
print a.__dict__
a.__dict__ を呼び出すと、出力が {name:'rafael',age:28} にならないのはなぜですか?
class Person(object):
def __init__(self):
self.name = 'Rafael'
@property
def age(self):
return 28
a = Person()
print a.__dict__
プロパティオブジェクト自体は次の場所にあります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
関数呼び出しの戻り値です。記述子ルックアップメカニズムを使用してを呼び出しますPerson.__dict__['age'].__get__(a,Person)
。
28は必ずしも固定値ではないため、Pythonは何も格納{'age':28}
しません。__dict__
呼び出されたその関数は、呼び出しごとに異なる値を返す可能性があります。'age'
したがって、 1つの戻り値だけに関連付けることは無意味です。
たとえば、
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