單例設計模式
單例設計模式的應用場景
**站物件
印表機物件
. . . . . .
重寫 __ new __方法的**非常固定**實現
**實現class
musicplayer
(object):
# 重寫new方法
def__new__
(cls,
*args,
**kwargs)
:# 1.建立物件時,new方法會被自動呼叫
('建立物件,分配空間'
)# 2.為物件分配空間
# 分配空間可以直接使用 super().方法名 呼叫父類的方法
instance =
super()
.__new__(cls)
# 注意:new方法是乙個靜態方法,我們在呼叫的時候必須傳入引數cls
# 3.返回物件的引用
return instance
def__init__
(self)
:print()
player = musicplayer(
(player)
class
musicplayer
(object):
# 記錄第乙個被建立物件的引用
instance =
none
def__new__
(cls,
*args,
**kwargs)
:# 1.判斷類屬性是否為空物件
if cls.instance is
none
:# 2.呼叫父類的方法,為第乙個物件分配空間
cls.instance =
super()
.__new__(cls)
# 3.返回類屬性儲存的物件引用
return cls.instance
def__init__
(self)
:print()
# 建立多個物件,檢視它們的記憶體位址是否一樣
player1 = musicplayer(
(player1)
player2 = musicplayer(
(player2)
class
musicplayer
(object):
# 記錄第乙個被建立物件的引用
instance =
none
# 記錄是否執行過初始化動作
init_flag =
false
def__new__
(cls,
*args,
**kwargs)
:# 1.判斷類屬性是否為空物件
if cls.instance is
none
:# 2.呼叫父類的方法,為第乙個物件分配空間
cls.instance =
super()
.__new__(cls)
# 3.返回類屬性儲存的物件引用
return cls.instance
def__init__
(self)
:# 1.判斷是否執行過初始化動作
if musicplayer.init_flag:
return
# 2.如果沒有執行過,再執行初始化動作
print()
# 3.修改類屬性的標記
musicplayer.init_flag =
true
# 建立多個物件,檢視它們的記憶體位址是否一樣
player1 = musicplayer(
(player1)
player2 = musicplayer(
(player2)
物件導向 單例模式
設計模式 解決某一類問題行之有效的解決辦法 思想 單例 singleton 設計模式 學習設計模式必須先弄清楚它是解決什麼問題的。單例是解決什麼問題的呢?可以保證乙個類的物件唯一性。場景 比如多個程式都要使用乙個配置檔案中的資料,而且要實現資料共享和交換。必須要將多個資料封裝到乙個物件中。而且多個程...
物件導向單例,異常
單例設計模式 目的 讓類建立的物件,在系統中只有唯一的乙個例項 每一次執行類名 返回的物件,位址是相同的 new 方法 使用類名 建立物件時,pyton中的直譯器會首先呼叫 new 方法作為物件 new 是乙個由object基類提供的內建靜態方法,主要作用有兩個 在內從中為物件分配空間 返回物件的引...
Python 物件導向 單例
單例設計模式 重寫 new 方法 的 非常固定!如果不返回任何結果,定義類屬性記錄單例物件引用 instance none def new cls,args,kwargs 1.判斷類屬性是否已經被賦值 if cls.instance is none cls.instance super new cl...