啥是單例?
.單例設計模式
·目的:讓類創建的對象,在系統中只有唯一的一個實例
·每一次執行類名()返回的對象,內容地址是相同的
·單例設計的應用場景:音樂播放器、打印機…
先看一個例子
#單例實例
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>
可以發現三個播放器對象的地址都一樣~