【发布时间】:2017-09-18 14:50:18
【问题描述】:
看看下面的例子
class Base(type):
def __init__(cls, name, bases, dict_):
print 'Base.__init__() with cls %s, name %s...' % (cls, name, )
type.__init__(cls, name, bases, dict_)
M = Base('M', (object,), {})
class D1(Base):
pass
class D2(M):
pass
输出是
Base.__init__() with cls <class '__main__.M'>, name M...
Base.__init__() with cls <class '__main__.D2'>, name D2...
我对结果感到很困惑,
- 为什么
Base.__init__会被D2调用,即使我们还没有创建D2的实例? - 既然
Base.__init__被D2调用,为什么D1不被调用?
【问题讨论】:
-
Err...
Base(arguments)调用Base.__init__... -
"为什么
Base.__init__会被D2调用,即使我们还没有创建D2的实例?" - 因为您创建了Base的实例。该实例是D2。
标签: python python-2.x metaclass