標籤:one 使用 width 目的 引用 相同 作用 一個 pre
單例設計模式
目的:讓類建立對象,在系統中只有唯一的執行個體,讓每一次建立的對象返回的記憶體位址都是相同的。
__new__方法
使用類名建立對象時,python解譯器首先會調用__new__方法為對象分配空間
__new__方法是有object基類提供的靜態方法,主要作用有兩個:
- 為記憶體中的對象分配空間
- 返回對象的引用,python解譯器獲得引用後會作為第一個參數返回給__init__方法
python中的單例:
- __new__方法只建立一次空間,返回一次引用
- __init___方法只初始化一次
所以,在python中實現單例需要重寫__new__方法,python中重寫__new__方法非常固定,必須要返回return super().__new__(cls),否則解譯器就得不到對象的引用就不會調用初始化方法,
python中單例的實現方式:
- 定義一個 類屬性,初始值是
None
,用於記錄 單例對象的引用
- 重寫__new__方法
- 如果 類屬性
is None
,調用父類方法分配空間,並在類屬性中記錄結果
- 返回 類屬性 中記錄的 對象引用
- 讓初始化工作只執行一次
範例程式碼如下:
class Single(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 Single.init_flag: print("初始化對象") Single.init_flag = Trues1 = Single()s2 = Single()print(s1)print(s2)
執行結果:
初始化對象<__main__.Single object at 0x7f4d032f1d68><__main__.Single object at 0x7f4d032f1d68>
python學習【第十篇】單例設計模式