1. 程式人生 > >__new__和__init__的區別

__new__和__init__的區別

ont sat ttr ima 完全 技術分享 __init__ http 圖片

  1. __new__是一個靜態方法,而__init__是一個實例方法.
  2. __new__方法會返回一個創建的實例,而__init__什麽都不返回.
  3. 只有在__new__返回一個cls的實例時後面的__init__才能被調用,並且__init__方法的屬性是__new__返回的實例

  技術分享圖片

技術分享圖片

  4.當創建一個新實例時調用__new__,初始化一個實例時用__init__.

單例類

class Singleton(object):
    def __new__(cls, *args, **kwargs):
        # 如果沒有_instance就創建一個,有的話直接返回
        if
not 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__的區別