一、概述
__new__负责创建类的实例对象,__init__负责对__new__创建的对象进行初始化,二者都由Python解释器自动调用。
二、示例
创建对象时,Python解释器会先调用__new__方法创建对象并返回,然后再调用__init__对创建好的对象进行初始化:
class Test: pass test = Test() #解释器的工作过程 #1.test = object.__new__(Test) #2.object.__init__(test) #因为Test没定义__init__方法,所以采用基类的方法,object是所有类的基类
如果重写了__new__方法,就必须显式的调用基类的__new__方法创建对象返回,__new__是解释器实现的类方法:
class Test: def __new__(cls, *args, **kwargs): self = super().__new__(cls, *args, **kwargs) #也可以直接写为object.__new__(cls, *args, **kwargs),object类是所有类的基类 self.gender = '男' return self def __init__(self, name, age=0): self.name = name self.age = age test = Test('meng', age=21) #解释器的工作过程 #1.test = Test.__new__(Test, 'meng', age=21) #2.Test.__init__(test, 'meng', age=21) test.gender #->男