python物件導向學習(七)單例

2022-07-06 17:09:12 字數 1818 閱讀 9042

目錄2. new 方法

3. python 中的單例

單例設計模式

**站物件

印表機物件

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

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

class musicplayer(object):

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

print("執行__new__")

instance = super().__new__(cls)

return instance

def __init__(self):

print("執行__init__")

mp1 = musicplayer()

print(mp1)

class musicplayer(object):

instance = none

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

if cls.instance is none:

cls.instance = super().__new__(cls)

return cls.instance

mp1 = musicplayer()

print(mp1)

mp2 = musicplayer()

print(mp2)

在上一小節對__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):

if cls.instance is none:

cls.instance = super().__new__(cls)

return cls.instance

def __init__(self):

if not musicplayer.init_flag:

musicplayer.init_flag = true

mp1 = musicplayer()

print(mp1)

mp2 = musicplayer()

print(mp2)

Python 物件導向 單例

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

python物件導向學習筆記六 單例

設計模式 針對某一特定問題的套路,或者說是成熟的解決方案,前任工作的總結。類名 這位格式的方法為內建方法,new 為object基類提供的內建的靜態方法。new 方法的作用 在記憶體為物件分配空間 返回物件的引用。將引用傳給python直譯器後,會將引用作為物件的第乙個引數,傳給 init 方法,進...

python物件導向程式設計 單例

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