为什么当我调用 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)
.
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