pyhton建立乙個物件的過程。
單例設計模式的一種實現方式。
當我們例項化乙個物件的時候,基本上可以分為如下步驟:
呼叫__new__(cls)
方法來建立乙個物件,然後找了乙個變數來接受__new__
的返回值,這個返回值表示建立出來的物件的引用
呼叫__init__(剛建立出來的物件的引用)
方法,初始化成員變數。
返回物件的引用
注意,這裡__new__
方法裡面需要傳遞的引數是cls
,指的是
我們可以拿python
建立乙個物件的過程和c++
的建構函式做個對比。顯然c++
的建構函式即負責建立物件,又負責初始化成員變數; 而python
是通過兩個步驟來完成的:__new__(cls)
方法只負責建立物件,__init__
方法只負責初始化成員變數。
從上面的總結來看,乙個常見的誤區就是錯誤的把__init__
方法等價於建構函式,嚴格來說他們是不等價的。
有了上述__new__
方法的機制,我們可以設計乙個單例模式如下:
這裡增加了乙個附加的東西,即設計乙個單例的同時只初始化一次成員變數。
class
singleton
(object):
__instance =
none
__init_flag =
false
def__new__
(cls,
*args,
**kwargs)
:if cls.__instance ==
none
: cls.__instance =
object
.__new__(cls)
return cls.__instance
def__init__
(self, num)
:# 這裡通過設定乙個類屬性的方式實現了只初始化一次成員變數的目的
ifnot singleton.__init_flag:
self.num = num
singleton.__init_flag =
true
s = singleton(
100)
print
(s.num)
s1 = singleton(
200)
# 第二次初始化引數時不會列印200
print
(s1.num)
# output
100100
python學習 設計模式之單例模式
一 什麼是單例模式 單例模式 singleton pattern 是一種常用的軟體設計模式,該模式的主要目的是確保某乙個類只有乙個例項存在。當你希望在整個系統中,某個類只能出現乙個例項時,單例物件就能派上用場。二 實現單例的方法 三 模組 python 模組在第一次匯入時,會生成 pyc 檔案,當第...
python設計模式 單例設計模式
樣式一 class musicplayer object instance none 設定類屬性,用來判斷是否有物件得到記憶體空間 init flag false 0表示還沒有初始化 1代表已經初始化 使用內建函式進行空間的分配 def new cls,args,kwargs cls 哪個類呼叫,就...
python設計模式 單例
是一種常用的設計模式,該模式的主要目的是確保某乙個類有且只有乙個例項存在。當希望系統中,某個類只能出現乙個例項時,就可以應用單例物件。每個例項都會占用一定的記憶體資源,且初始化例項時會影響執行效能,所以當整個系統只需乙個例項時,使用單例模式不僅可減少資源占用,而且因為只初始化一次,還可以加快執行效能...