python單列模式 Python單列模式

2021-10-11 20:26:19 字數 1521 閱讀 9724

實現單例模式的幾種方式

1.使用模組

2.使用裝飾器

3.使用類

4.基於__new__方法實現(推薦使用,方便)

5.基於metaclass方式實現

單例模式(singleton pattern)是一種常用的軟體設計模式,該模式的主要目的是確保某乙個類只有乙個例項存在。當你希望在整個系統中,某個類只能出現乙個例項時,單例物件就能派上用場。(說白了只能例項一次,再次例項的時候,就直接回去上一次例項物件值)

在 python 中,我們可以用多種方法來實現單例模式

1.使用模組:

其實,python 的模組就是天然的單例模式,因為模組在第一次匯入時,會生成 .pyc 檔案,當第二次匯入時,就會直接載入 .pyc 檔案,而不會再次執行模組**。因此,我們只需把相關的函式和資料定義在乙個模組中,就可以獲得乙個單例物件了。如果我們真的想要乙個單例類,可以考慮這樣做:

有個檔案叫fucn.py 內容如下

class admin(object):

def foo(self):

pass

class admin_s(object):

def foo_s(self):

pass

ad = admin_s()

直接在其他檔案中匯入此檔案中的物件,這個物件即是單例模式的物件

在test.py檔案中匯入fucn檔案中的admin(乙個物件)後

from fucn importadmin

fs1=admin()     #第一次例項化物件print(id(fs1)) #記憶體位址 1588616288072from fucn importadmin

fs2=admin()    #第二次例項化物件print(id(fs2)) #記憶體位址 1588616290088

結論: 在乙個程式中兩次每次直接產生乙個新的例項化物件 ; 記憶體位址會變,這不是同乙個物件內容,所以這不是單例模式

在test.py檔案中匯入fucn檔案中的ad(乙個例項化物件)後

from fucn importadprint(id(ad.foo_s())) #記憶體位址 140728010960096from fucn importad as ad_newprint(id(ad.foo_s())) #記憶體位址 140728010960096

結果:在乙個程式中 當兩次直接匯入ad例項化物件值的時候 ; 兩次執行結果是乙個記憶體位址,是同乙個內容,這是單例模式

在新建乙個fucn1.py檔案 內容如下:

from fucn importaddefboo():print(id(ad.foo_s()))

再一次test.py檔案中匯入fucn檔案中的ad(乙個例項化物件)後

from fucn import ad

from fucn import ad as ad_new

from fucn1 import boo #再匯入func1 中的boo物件

結論: 在執行乙個程式中,當匯入是另外乙個新的檔案,但新的檔案還是匯入是同乙個例項物件ad的時候,這時候我們拿到還是同乙個內容,這也是單例模式

python單列模式

單例模式 singleton pattern 是一種常用的軟體設計模式,該模式的主要目的是確保某乙個類只有乙個例項存在。當你希望在整個系統中,某個類只能出現乙個例項時,單例物件就能派上用場。單例模式的要點有三個 一是某個類只能有乙個例項 二是它必須自行建立這個例項 三是它必須自行向整個系統提供這個例...

Python 物件導向 單列模式

1 什麼是單例模式 乙個類有且只能建立乙個物件空間,目的是為了節約記憶體資源 例如 站 資料庫操作類 只需要乙個物件就能完成所有的功能,沒有必要建立多個物件浪費記憶體資源.2.實現單例模式 class singleton object 類屬性 instance none isinit false 是...

Python 裝飾器實現單列模式

使用裝飾器實現單列模式 defsingleton cls 用來存在例項的字典 singleton instance 判斷字典中是否例項 ifnot singleton instance.get cls.name 沒有則建立乙個例項,並存入字典中 singleton instance cls.name...