Python 【單例】

啥是單例?
.單例設計模式
·目的:讓類創建的對象,在系統中只有唯一的一個實例
·每一次執行類名()返回的對象,內容地址是相同的
·單例設計的應用場景:音樂播放器、打印機…

先看一個例子

#單例實例
class Musicplayer() :
    pass


#創建2個音樂播放器對象
player1 = Musicplayer()
player2 = Musicplayer()
#輸出2個播放器的地址,觀察地址是否一樣
print(player1)
print(player2)  

輸出結果爲

<__main__.Musicplayer object at 0x000002074CF6B5C0>
<__main__.Musicplayer object at 0x000002074CF6B518>

可以發現兩個播放器對象的地址不一樣,那怎麼讓地址變成一樣的呢?
先看看設計思路
在這裏插入圖片描述再來看看代碼:

class Musicplayer(object) :
    #記錄第一個被創建對象的引用
    class_attributes = None

    def __new__(cls, *args, **kwargs):
        # 1. 判斷類屬性是否爲空對象
        if cls.class_attributes is None :
            # 2. 調用父類的方法,爲第一個對象分配空間
            cls.class_attributes = super().__new__(cls)
        # 3. 返回類屬性保存的對象引用
        return cls.class_attributes

#創建多個對象
player1 = Musicplayer()
player2 = Musicplayer()
player3 = Musicplayer()
#輸出對象地址,觀察是否一致
print(player1)
print(player2)
print(player3)

結果爲:

<__main__.Musicplayer object at 0x0000023271FE60F0>
<__main__.Musicplayer object at 0x0000023271FE60F0>
<__main__.Musicplayer object at 0x0000023271FE60F0>

可以發現三個播放器對象的地址都一樣~

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