__new__和__init__的區別
阿新 • • 發佈:2018-12-03
ont sat ttr ima 完全 技術分享 __init__ http 圖片
__new__
是一個靜態方法,而__init__
是一個實例方法.__new__
方法會返回一個創建的實例,而__init__
什麽都不返回.- 只有在
__new__
返回一個cls的實例時後面的__init__
才能被調用,並且__init__方法的屬性是__new__返回的實例
4.當創建一個新實例時調用__new__
,初始化一個實例時用__init__
.
單例類
class Singleton(object): def __new__(cls, *args, **kwargs): # 如果沒有_instance就創建一個,有的話直接返回 ifnot hasattr(cls,‘_instance‘): # __new__已經被重寫,所以只能執行父類的__new__ cls._instance=object.__new__(cls,*args,*kwargs) return cls._instance class MyClass(Singleton): a=1 one=MyClass() two=MyClass() # one和two完全相同,可以用id(),==,is檢查 print(one.a) # 1 print(two.a) print(id(one)) #2565285375728 print(id(two)) # 2565285375728 print(one == two) # True print(one is two) # True
__new__和__init__的區別