Python中單例模式詳細解析(面試題目)

2021-09-28 14:04:30 字數 1387 閱讀 1471

單例設計模式:

目的::讓類建立的物件,在系統只執行唯一例項,即每一次執行類名.()返回的物件,記憶體位址是相同的,可以通過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 為什麼要使用雙重檢查鎖?...