python中的單例設計模式

2022-08-27 02:36:10 字數 1793 閱讀 3414

單例設計模式

**站 物件

印表機 物件

……python的直譯器獲得物件的 引用 後,將引用作為 第乙個引數,傳遞給__init__方法

重寫__new__方法 的**非常固定!

示例**

class

musicplayer(object):

def__new__(cls, *args, **kwargs):

#如果不返回任何結果,

return super().__new__

(cls)

def__init__

(self):

print("")

player =musicplayer()

print(player)

class

musicplayer(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__方法時,初始化動作就不會被再次執行 了

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):

ifnot

musicplayer.init_flag:

print("")

musicplayer.init_flag =true

#建立多個物件

player1 =musicplayer()

print

(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 重寫...