-
__ 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__的區別
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.