字数限制,
标题:python中__new__和__init__的区别,2.X版本中object.__call__的机制是什么?
书上是这样说的:
"由于元类是type的一个子类,所以type类的__call__把创建和初始化新的类对象的调用委托给元类。type中的call调用meta中的__new__创建了一个新的类并返回。"
以下是我的猜测:
同样的机制也适用于普通类(也就是非元类)。
举例:
class B(object):
def new(cls, *args, **kwds):
print "three"
print cls
print B
print "B.__new__", args, kwds
return object.__new__(cls, *args, **kwds)
def init(cls, *args, **kwds):
print "four"
print "B.__init__", args, kwds
class A(object):
def new(cls, *args, **kwds):
print "one"
print "A.__new__", args, kwds
return object.__new__(B, *args, **kwds)
def init(cls, *args, **kwds):
print "two"
print "A.__init__", args, kwds
print A()
print "====================="
print B()
输出如下:
one
A.__new__ () {}
<__main__.B object at 0x027F3DD0>
three
B.__new__ () {}
four
B.__init__ () {}
<__main__.B object at 0x027F3CF0>
我的疑问是:为什么执行这条语句
return object.__new__(B, *args, **kwds)
之后,A.__init__没有被自动调用?
我猜测,__new__和__init__被默认调用,是由于object.__call__的存在。但是call里面的机制是什么呢。。。