單例設計模式
**站 物件
印表機 物件
……python
的直譯器獲得物件的 引用 後,將引用作為 第乙個引數,傳遞給__init__
方法
重寫__new__
方法 的**非常固定!
示例**
classmusicplayer(object):
def__new__(cls, *args, **kwargs):
#如果不返回任何結果,
return super().__new__
(cls)
def__init__
(self):
print("")
player =musicplayer()
print(player)
classmusicplayer(object):
#定義類屬性記錄單例物件引用
instance =none
def__new__(cls, *args, **kwargs):
#1. 判斷類屬性是否已經被賦值
if cls.instance is
none:
cls.instance = super().__new__
(cls)
#2. 返回類屬性的單例引用
return cls.instance
在上一小節對__new__
方法改造之後,每次都會得到 第一次被建立物件的引用
但是:初始化方法還會被再次呼叫
需求解決辦法
定義乙個類屬性init_flag
標記是否 執行過初始化動作,初始值為false
在__init__
方法中,判斷init_flag
,如果為false
就執行初始化動作
然後將init_flag
設定為true
這樣,再次 自動 呼叫__init__
方法時,初始化動作就不會被再次執行 了
classmusicplayer(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):
ifnot
musicplayer.init_flag:
print("")
musicplayer.init_flag =true
#建立多個物件
player1 =musicplayer()
(player1)
player2 =musicplayer()
print(player2)
Python中單例設計模式
class singleton object 注釋 instanc none def init self,name,age self.name name self.age age def new cls,name,age 建立乙個單例的物件 建立乙個 instance用來儲存第一次建立的物件引用 如...
Python中的單例設計模式
印表機物件 站物件 四 new 方法 在記憶體中為物件分配空間 返回物件的引用 重寫 new 方法的格式非常固定 eg class musicplayer 建立乙個類屬性,記錄第乙個被建立物件的引用 instance none def new cls,args,kwargs 判斷類屬性是否為空 if...
python中的單例設計模式
設計模式 是前人工作的總結和提煉,是對某一問題的成熟的解決方案,使用設計模式是為了可重用 讓 更容易被他人理解和 的可靠性 單例設計模式 a.目的 讓類建立物件,在系統中只有乙個唯一的乙個例項 b.每一次執行類名返回的物件,記憶體位址是相同的 記錄第一次被建立的引用 instance none 重寫...