__new__方法和__init__方法

来源:互联网 发布:js中播放器代码 编辑:程序博客网 时间:2024/05/16 18:18

python中,真正创建并且返回类实例的方法是__new__方法,该方法是一个类方法。如果__new__方法返回了当前类的一个实例,则自动执行当前类的__init__方法,对实例进行一些后续的初始化工作;如果返回的不是当前类的实例,则不执行__init__方法。


返回当前类实例

class A(object):    passclass 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'>initProcess finished with exit code 0



返回父类实例

class A(object):    passclass 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





0 0