1、__new__()至少要有一个参数cls,代表当前类,此参数在实例时由python解释器自动识别, 2、__new__()必须要有返回值,返回实例化出来的实例,这点在自己实现__new__时要特别注意, 可以 return父类new出来的实例,
如:return super(当前类名,cls).__new__(cls),或者直接return object.__new__(cls) 3、init有一个参数self,就是这个__new__()方法返回的实例,
可以完成一些其它初始化的动作,init不需要返回值(有返回值就会报错) 4、如果__new__()创建的是当前类的实例,会自动调用__init__()函数,
通过return语句里面调用的__new__(cls)函数的第一个参数是cls来保证是当前类实例,
如果是其他类的类名,那么实际创建返回的就是其他类的实例,其实就不会调用当前类的__init__()函数,也不会调用其他类的__init__()函数。
通过new方法实现单例:
''' __new__实现 ---> 通过调用类方法实例化对象时,自动触发的__new__来实现单例 ''' class Aoo(object): _instance = None def __new__(cls, *args, **kwargs): if not cls._instance: cls._instance = object.__new__(cls) return cls._instance a1 = Aoo() a2 = Aoo() # print(a1 is a2) # True
标签:__,return,Python,init,实例,new,cls From: https://www.cnblogs.com/yesirya/p/16767518.html