__new__方法是创建一个对象空间,需要注意与__init__的区别:
__new__是构造方法,创建新的对象空间,而__init__方法是初始化方法,对对象的属性进行封装.
__new__方法执行是在实例化一个对象之后,在执行__init__方法之前,如果创建的类里没有__new__方法,就会向python3的默认父类object中寻找!
__new__典型的用法就是单例类的运用:
当类中只需要实例化一个对象时,就要用到__new__方法
class A: INIT = None def __new__(cls,*args,**kwargs): if not cls.INIT: cls.INIT = object.__new__(cls) #创建一个新的对象空间,有了一个对象空间将跳过此步 return cls.INIT #如果已有对象空间,就将原有的对象空间返回,不再执行对象空间的创建 def __init(self): pass