單例設計模式:
目的::讓類建立的物件,在系統只執行唯一例項,即每一次執行類名.()返回的物件,記憶體位址是相同的,可以通過id(例項物件)來檢視例項物件對應的記憶體空間位址。
__new__方法:
使用類名()建立物件時,python的直譯器首先會呼叫__new__方法為物件分配空間,然後在執行__init__初始話例項物件。
object提供的__new__靜態方法,主要有倆個作用:
在記憶體中為物件分配空間
返回物件的引用
python直譯器獲取物件的引用後,將引用作為第乙個引數,傳遞給__init__方法
注意點:重寫__new__方法一定要return super().new(cls), 否則python直譯器得不到分配空間引用,就不會呼叫物件的初始化
__new__是乙個靜態方法,在呼叫時需要主動傳遞cls函式。
單例設計語句:
目的:讓類建立的物件,在系統中只有唯一的乙個例項
流程:
定義乙個類屬性,初始值是none, 用於記錄單例物件的引用。
重寫__new__方法
如果類屬性is none,呼叫父類方法分配空間,並在類屬性中記錄結果
返回類屬性中記錄的物件引用。
classa(
object):
__instance =
none
def__new__
(cls,
*args,
**kwargs)
:if cls.__instance is
none
: cls.__instance =
super()
.__new__(cls)
return cls.__instance
else
:return cls.__instance
a1 = a(
)a2 = a(
)print
("a1的id為:",id
(a1)
)print
("a2的id為:",id
(a2)
)print
("a1 is a2:"
, a1 is a2)
'''結果:
a1的id為: 140126579040944
a2的id為: 140126579040944
a1 is a2: true
'''
同理,如果想要只執行一次初始化的操作,也是定義乙個類屬性標籤記錄,然後重寫__init__方法
單例模式(詳細)
b站學習做的筆記 單例模式就是採取一定的方法保證整個軟體 統裡面對於某個類只能存在乙個例項 並且該類只提供乙個取物件例項的方法 靜態方法 餓漢式 靜態常量 餓漢式 靜態 塊 懶漢式 執行緒不安全 懶漢式 執行緒安全 同步方法 雙重檢查 靜態內部類 列舉 餓漢式的兩種寫法 1靜態常量 步驟 1.構造器...
單例模式解析
1 餓漢模式 優點 在類初始化時已經例項化完成,呼叫時較快 執行緒安全 缺點 不管後期是否使用,都進行了一次初始化,有可能浪費資源 public class singleton 建構函式私有化 public static singleton getinstance 2 懶漢模式 不推薦 優點 只有在...
單例模式解析
什麼是單例模式?在整個jvm執行週期中只有乙個例項的物件。用法 執行緒安全 double check public void class singleton 3.實現雙重檢查鎖構造單例 public singleton getinstance return instance 為什麼要使用雙重檢查鎖?...