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).

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
于 2013-02-21T12:52:34.447 回答