python __new__ 方法/單例模式

# __new__ 方法

class Dog(object):
    def __init__(self):
        print("---init方法---")
    def __del__(self):
        print("---del方法---")
    def __str__(self):
        print("---str方法---")

    # 創建對象時就會被調用
    # 沒重載之前,默認是調用父類的 __new__
    def __new__(cls): # cls 此時時Dog只想的那個類對象
        print("---new方法---")
        print(id(cls))
        return object.__new__(cls)

print(id(Dog))
d = Dog();
"""
1. 調用 __new__ 來創建對象,然后找了一個變量來接收__new__的返回值,這個返回值表示,創建出來的對象的引用
2. 調用__init__(剛剛常見出來的對象的引用)
3. 返回對象的引用
    所以 __new__ 只負責創建 , __init__ 只負責初始化 
    而Java的構造方法等于 __new__() + __init__()
"""


# 單例模式 實現
class Dog(object):

    __instance = None;

    # 創建對象時就會被調用
    # 沒重載之前,默認是調用父類的 __new__
    def __new__(cls): # cls 此時時Dog只想的那個類對象
        print("---new方法---")
        if cls.__instance == None:
            cls.__instance = object.__new__(cls);
        return cls.__instance ;

a = Dog();
b = Dog();
print( id(a) == id(b) )

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容