python 單例設計模式

2021-09-27 10:32:47 字數 1479 閱讀 3875

1.設計模式

設計模式是前人工作的總結和提煉,通常,被人們廣泛流傳的設計模式都

是針對某一特定問題的成熟解決方案

使用設計模式是為了可重用**,讓**更容易被他人理解,

保證**可靠性

2.單例設計模式

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

每一次執行類名()返回的物件

記憶體位址是相同的

3.怎麼保證 這些物件只有乙個?

__new__方法:

我們用 類名. 的方式建立物件的時候,python直譯器會幫我們做兩件事情,是哪兩件事情呢?

1.為物件分配空間 2.物件初始化

使用類名()建立物件時,python的直譯器首先會呼叫__new__方法為物件分配空間

__new__是乙個由object基類提供的內建的靜態方法,主要有兩個作用:

在記憶體中為物件分配空間

返回物件的引用

python的直譯器獲得物件的引用後,將引用作為第乙個引數,傳遞給__init__方法

new:負責給物件分配空間init(初始化方法)負責給物件初始化

我們要重寫new方法,使用類名()建立物件的時候,返回的都是同乙個位址

重寫__new__方法的**非常固定:

繼承自父類方法

返回父類方法呼叫_new__方法的結果

重寫__new__方法一定要return object.__new__(cls)

否則python的直譯器得不到分配了空間的物件引用,就不會呼叫物件的初始化方

讓類建立的物件在系統中只有唯一乙個例項,也就是說這個類在系統中只有乙個對應的物件。每次執行類名返回的物件其記憶體位址是相同的

例如開啟qq**時,只能放一首歌,不能同時放兩首歌。

class

musciplayer

(object)

: instance = none

def __new__

(cls,

*args,

**kwargs)

:if cls.instance is none:

cls.instance = object.

__new__

(cls)

return cls.instance

player1 =

musciplayer()

player2 =

musciplayer()

print

(player1)

print

(player2)

結果:<__main__.musciplayer object at 0x7f5c7977c438

>

<__main__.musciplayer object at 0x7f5c7977c438

> #返回兩個相同的記憶體位址空間

python設計模式 單例設計模式

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

python設計模式 單例

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

python 單例設計模式

windows系統中的 站,無論任何地方呼叫的 站都指向的是同乙個 站,站的屬性和方法會被重複呼叫,這樣容易產生衝突浪費資源,這種情況下,單例模式就是乙個很好的實現方法。python的設計模式主要有三大類 建立類設計模式 結構類設計模式 行為類設計模式 python與設計模式相關介紹 類是抽象的,先...