python中,真正创建并且返回类实例的方法是__new__方法,该方法是一个类方法。如果__new__方法返回了当前类的一个实例,则自动执行当前类的__init__方法,对实例进行一些后续的初始化工作;如果返回的不是当前类的实例,则不执行__init__方法。
返回当前类实例
class A(object):
pass
class B(A):
def __init__(self):
print 'init'
def __new__(cls):
print 'create %s' % cls
return super(B, cls).__new__(cls)
b = B()
执行结果
create <class '__main__.B'>
init
Process finished with exit code 0
返回父类实例
class A(object):
pass
class B(A):
def __init__(self):
print 'init'
def __new__(cls):
print 'create %s' % cls
return super(B, cls).__new__(A)
b = B()
执行结果
create <class '__main__.B'>
Process finished with exit code 0