0

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__
4

1 に答える 1

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関数呼び出しの戻り値です。記述子ルックアップメカニズムを使用してを呼び出します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
于 2013-02-21T12:52:34.447 に答える