-
__ new __ 是一个静态方法,而__ init __是一个实例方法
-
__ new __ 方法返回一个创建的实例,而__ init __只能返回None或什么都不返回
-
只有在__ new __ 返回一个cls的实例后,__ init __才会被调用
-
当创建一个新实例时调用__ new __ ;初始化一个实例时用__ init __
-
事例说明如下:
-
class display(object): #第一个参数self就是__new__创建的实例,返回None或者不返回 def __init__(self, *args, **kwargs): print("init") #第一个参数为cls,一般返回父类的__new__,一般__new__都是object类的后代 def __new__(cls, *args, **kwargs): print("new") print(type(cls)) return object.__new__(cls, *args, **kwargs) a=display() #输出结果: #执行顺序,先__new__,后__init__ new #__new__第一个参数cls类型为'type' <class 'type'> init
class another(object): def __new__(cls,*args,**kwargs): print("newano") return object.__new__(cls, *args, **kwargs) class display(object): def __init__(self, *args, **kwargs): print("init") def __new__(cls, *args, **kwargs): print("newdis") print(type(cls)) #返回的时其他类的实例 return another.__new__(cls, *args, **kwargs) a=display() #输出结果: #__init__就用__new__提供的实例来完善self这个对象,并且不需要知道它的来源是否正宗.但是肯定同宗,都继承于object. newdis <class 'type'> newano init
python中__new__和__init__的区别
最新推荐文章于 2023-09-15 14:11:47 发布