A.__dict__
не является статическим объектом. Каждый раз, когда мы обращаемся к A.__dict__
, он внутренне вызывает метод, и этот метод возвращает то, что мы получаем. Поэтому каждый раз, когда мы получаем другой объект.
Теперь, Что этот метод
Когда мы достигаем A.__dict__
, этот вызов оценивается как meta_type_of_A.__dict__[__dict__]
, что означает, что будет вызывать в __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