日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > python >内容正文

python

Python3 实现单例设计模式

發布時間:2023/12/4 python 25 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Python3 实现单例设计模式 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

單例模式的一般實現

餓漢式

懶漢式就是通過一個方法才能實現單例,我不是很常用,所以在此就寫個餓漢式。以后再補懶漢式。
單例模式的核心作用是保證一個類只有一個該類型的對象。在一個對象被過多調用時避免過多的消耗內存,即可使用單例模式。

在python中新建一個對象會調用 __new__ 方法為創建的對象分配其內存空間,并且返回該對象的引用,隨后將會傳給 __init__ 函數進行實例化。

一般情況下并不需要調用 new 方法,當使用單例時這一步是必要的。在重寫 new 方法時需要返回當前實例的類 cls :return super().__new__(cls)。得到了分配的內存空間引用后,開始為對象進行實例化,代碼可以簡單的寫為如下:

class ClassObj(object):def __new__(cls):print("進行分配內存")return super().__new__(cls)def __init__(self):print("開始初始化") cobj = ClassObj()

運行結果如下:

但是以上的代碼并沒有實現單例模式,這個時候,我們需要對以上代碼進行更改。
在使用 new 方法時判斷是否已經被實例化:

class ClassObj(object):instance=Nonedef __new__(cls):if cls.instance is None:cls.instance=super().__new__(cls)print("進行分配內存")else:print("已經分配了")return cls.instancedef __init__(self):print("已經分配了") cobj = ClassObj() cobj1 = ClassObj()

以上代碼在ClassObj中,定義了一個成員變量 instance,用來存儲分配的空間引用,并且在__new__方法中最后return instance;假設第一次新建該類對象,instance為None則會進行實例化,假設不為None,則會提示已經分配了,不會再次分配空間,進行創建。運行結果如下:

以上結果只在第一次新建對象時分配了空間,之后創建對象并沒有新建空間。
這時也可以直接輸出類對象查看空間:

cobj = ClassObj() cobj1 = ClassObj() print(cobj) print(cobj1)

結果如下是相同的:

總結

以上是生活随笔為你收集整理的Python3 实现单例设计模式的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。