python __new__ 方法/單例模式

# __new__ 方法

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

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

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


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

    __instance = None;

    # 創(chuàng)建對象時就會被調(diào)用
    # 沒重載之前,默認是調(diào)用父類的 __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) )

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容