python單例設計模式

2021-10-10 23:22:18 字數 2144 閱讀 1020

目的– 讓建立的物件, 在系統中只有唯一的乙個例項

每次執行 類名() 返回的物件,記憶體位址是相同的

使用類名()建立物件時, 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與設計模式相關介紹 類是抽象的,先...