__new__内部工作方式

__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

    

原文地址:https://www.cnblogs.com/smile568968/p/9399402.html