python 單例設計模式

2021-09-25 00:08:49 字數 1823 閱讀 5503

windows系統中的**站,無論任何地方呼叫的**站都指向的是同乙個**站,**站的屬性和方法會被重複呼叫,這樣容易產生衝突浪費資源,這種情況下,單例模式就是乙個很好的實現方法。

python的設計模式主要有三大類:

建立類設計模式

結構類設計模式

行為類設計模式

python與設計模式相關介紹

類是抽象的,先有類再有物件,物件是類創造的具體存在

使用類名()創造物件時,python直譯器通常會做兩件事情

分配空間,即呼叫內建函式__new__方法為物件在記憶體中分配空間,由__new__方法返回物件的引用

物件初始化,即python直譯器獲得物件的引用後,將引用作為第乙個引數,傳遞給內建函式__init__,後用__init__方法為屬性設定初始值

知識點

需求:

重寫__new__方法,實現單例模式

多個物件,初始化只執行一次

#!/usr/bin/env python

# coding:utf-8

# created by johnny on 2019.07.05

class

singleton

(object):

# 建立第乙個物件的引用

instance =

none

# 預設沒有執行過初始化動作

init_flag =

false

def__new__

(cls,

*args,

**kwargs)

:"""

分配空間,返回引用

"""# 判斷類屬性是否是空物件,空物件代表沒有第乙個物件的引用

if cls.instance is

none

:# 呼叫父類方法,為第乙個物件分配空間

# python3

cls.instance =

super()

.__new__(cls)

# python2

# cls.instance = super(singleton, cls).__new__(cls)

# 返回類屬性儲存的物件引用

return cls.instance

def__init__

(self)

:"""

物件初始化

"""# 判斷是否執行過初始化

if singleton.init_flag:

return

# 如果沒有執行過,則執行初始化

print

("屬性初始化"

)# 修改初始化動作

singleton.init_flag =

true

if __name__ ==

"__main__"

:# 建立多個物件

singleton1 = singleton(

)print

(singleton1)

singleton2 = singleton(

)print

(singleton2)

輸出

屬性初始化

<__main__.singleton object at 0x000001f0676714a8

>

<__main__.singleton object at 0x000001f0676714a8

>

如果不要求初始化次數,可以刪除有關init_flag的**

python設計模式 單例設計模式

樣式一 class musicplayer object instance none 設定類屬性,用來判斷是否有物件得到記憶體空間 init flag false 0表示還沒有初始化 1代表已經初始化 使用內建函式進行空間的分配 def new cls,args,kwargs cls 哪個類呼叫,就...

python設計模式 單例

是一種常用的設計模式,該模式的主要目的是確保某乙個類有且只有乙個例項存在。當希望系統中,某個類只能出現乙個例項時,就可以應用單例物件。每個例項都會占用一定的記憶體資源,且初始化例項時會影響執行效能,所以當整個系統只需乙個例項時,使用單例模式不僅可減少資源占用,而且因為只初始化一次,還可以加快執行效能...

Python 單例設計模式

在記憶體中為物件分配空間 返回物件引用 python 直譯器獲得物件引用後,將引用的第乙個引數,傳遞給 new 方法 重寫 new 方法的 非常固定!重寫 new 方法一點要 return super new cls 否則 python的直譯器得不到分配了空間的物件引用,就不會呼叫物件的初始化方法 ...