Python物件導向 17 單例

2021-10-04 10:56:56 字數 1677 閱讀 3808

單例設計模式

設計模式:

單例設計模式:

__new__方法

class musicplayer(object):

def __new__(cls, *args, **kwargs):

# 建立物件時 new方法會被自動呼叫

print("建立物件 分配空間")

# 為物件分配空間

instance = super().__new__(cls)

# 返回物件的引用

return instance

def __init__(self):

player = musicplayer()

print(player)

python中的單例

單例:讓類建立的物件,在系統中只有唯一的乙個例項

定義乙個類屬性,初始值是none,用於記錄單例物件的引用

重寫__new__方法

如果類屬性is none呼叫父類的方法分配空間,並在類屬性中記錄結果

返回類屬性中記錄的物件引用

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

# 建立多個物件

player1 = musicplayer()

print(player1)

player2 = musicplayer()

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

# 判斷是否執行過初始化動作

if musicplayer.init_flag:

return

# 如果沒有執行過在執行初始化動作

# 修改類屬性的標記

musicplayer.init_flag = true

# 建立多個物件

player1 = musicplayer()

print(player1)

player2 = musicplayer()

print(player2)

Python 物件導向 單例

單例設計模式 重寫 new 方法 的 非常固定!如果不返回任何結果,定義類屬性記錄單例物件引用 instance none def new cls,args,kwargs 1.判斷類屬性是否已經被賦值 if cls.instance is none cls.instance super new cl...

python物件導向程式設計 單例

單例設計模式 站物件 印表機物件 python的直譯器獲得物件的引用後,將引用作為第乙個引數,傳遞給 init 方法 重寫 new 方法 的 非常固定!示例 class music object def new cls,args,kwargs 如果不返回任何結果,return super new c...

python 物件導向 10 單例

單例設計模式 站物件 印表機物件 python的直譯器獲得物件的引用後,將引用作為第乙個引數,傳遞給 init 方法 重寫 new 方法 的 非常固定!示例 class musicplayer object def new cls,args,kwargs 如果不返回任何結果,return super...