python中__init__ 和__new__的區別

__new__是一個類方法,它返回的是一個實例

__init__是一個實例方法,它什麼都不返回(如果返回None之外的東西會報錯)

事實上,創建一個類分2步。第一步,創建類的對象,就是new;第二步對類進行初始化,就是init

只有在__new__返回一個新創建屬於該類的實例時,當前類的 __init__纔會被調用。(換言之,如果new方法沒有return一個屬於該類的實例,則init方法不會被執行;或者__new__方法返回一個已經存在的實例,則__init__方法也不會被調用)

所以單例模型可以這樣創建:

class Animal(object):
    __instance = None
    def __new__(cls):
        if cls.__instance == None:
            cls.__instance = object.__new__(cls)
            return cls.__new__(cls)
        else:
            return cls.__instance
a = Animal()
print(id(a))
b = Animal()
print(id(b))
print(id(a)==id(b))

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章