我正在尝试理解为什么字典代理__dict__
在每次被访问时都会更改其id。
>>> class A(object):
pass
>>> A.__dict__ is A.__dict__
False
据我所知,dictproxy是一个特殊的只读字典,但这并不能解释这种行为。
我正在尝试理解为什么字典代理__dict__
在每次被访问时都会更改其id。
>>> class A(object):
pass
>>> A.__dict__ is A.__dict__
False
A.__dict__
不是静态对象,每次访问A.__dict__
时,它内部都会调用一个方法并返回我们获取的内容。因此,每次获取到的对象都是不同的。A.__dict__
时,它被评估为meta_type_of_A.__dict__[__dict__]
,这意味着它将调用A的元类的__getattribute__
方法。>>> class mymeta(type):
def __init__(cls, name, bases,dict):
print "in my meta"
def __getattribute__(*args):
print "in get attribute of meta class"
return "A test string"
>>> class A(object):
__metaclass__ = mymeta
pass
in my meta
>>> d = A.__dict__
in get attribute of meta class
>>> print d
A test string
__subclasshook__
的行为相同,我无法弄清原因。 - mvelay