目的– 讓類建立的物件, 在系統中只有唯一的乙個例項
每次執行 類名() 返回的物件,記憶體位址是相同的
使用類名()建立物件時, python的直譯器首先會呼叫new方法為物件分配空間
__new__是乙個由object基類提供的內建的靜態方法, 主要作用有兩個 :
在記憶體中為物件加粗樣式返回物件的引用
重寫new方法一定要 return super().new(cls)
class
game
:def
__new__
(cls,
*args,
**kwargs)
:print
("建立物件, 分配空間"
)def
__int__
(self)
:print
("初始化"
)g = game(
)print
(g)# 列印
建立物件, 分配空間
none
由上面的例子可以看出, 類並沒有初始化, 所以列印出來的類例項為none
class
game
:def
__new__
(cls,
*args,
**kwargs)
:# 建立物件時, new方法會自動被呼叫
print
("建立物件, 分配空間"
)# 為物件分配空間
instance =
super()
.__new__(cls)
# 返回物件的引用
return instance
def__init__
(self)
:print
("初始化"
)g = game(
)print
(g)
使用父類的__new__方法為物件分配空間, 最後返回物件的引用
class
game
: instance =
none
def__new__
(cls,
*args,
**kwargs)
:# 判斷類物件是否為空物件
if cls.instance is
none
:# 為物件分配空間
cls.instance =
super()
.__new__(cls)
# 返回物件的引用
return cls.instance
def__init__
(self)
:print
("初始化"
)g1 = game(
)g2 = game(
)g3 = game(
)print
(g1)
print
(g2)
print
(g3)
class
game
: instance =
none
init_flag =
none
def__init__
(self)
:# 判斷是否執行過初始化動作
if game.init_flag:
return
# 如果沒有執行過, 再執行初始化動作
print
("初始化"
)# 修改標記
game.init_flag =
true
g1 = game(
)g2 = game(
)g3 = game(
)
python設計模式 單例設計模式
樣式一 class musicplayer object instance none 設定類屬性,用來判斷是否有物件得到記憶體空間 init flag false 0表示還沒有初始化 1代表已經初始化 使用內建函式進行空間的分配 def new cls,args,kwargs cls 哪個類呼叫,就...
python設計模式 單例
是一種常用的設計模式,該模式的主要目的是確保某乙個類有且只有乙個例項存在。當希望系統中,某個類只能出現乙個例項時,就可以應用單例物件。每個例項都會占用一定的記憶體資源,且初始化例項時會影響執行效能,所以當整個系統只需乙個例項時,使用單例模式不僅可減少資源占用,而且因為只初始化一次,還可以加快執行效能...
python 單例設計模式
windows系統中的 站,無論任何地方呼叫的 站都指向的是同乙個 站,站的屬性和方法會被重複呼叫,這樣容易產生衝突浪費資源,這種情況下,單例模式就是乙個很好的實現方法。python的設計模式主要有三大類 建立類設計模式 結構類設計模式 行為類設計模式 python與設計模式相關介紹 類是抽象的,先...