簡(jiǎn)單了解python單例模式的幾種寫(xiě)法
方法一:使用裝飾器
裝飾器維護(hù)一個(gè)字典對(duì)象instances,緩存了所有單例類,只要單例不存在則創(chuàng)建,已經(jīng)存在直接返回該實(shí)例對(duì)象。
def singleton(cls):
instances = {}
def wrapper(*args, **kwargs):
if cls not in instances:
instances[cls] = cls(*args, **kwargs)
return instances[cls]
return wrapper
@singleton
class Foo(object):
pass
foo1 = Foo()
foo2 = Foo()
print foo1 is foo2
方法二:使用基類
__new__是真正創(chuàng)建實(shí)例對(duì)象的方法,所以重寫(xiě)基類的__new__方法,以此來(lái)保證創(chuàng)建對(duì)象的時(shí)候只生成一個(gè)實(shí)例
class Singleton(object): def __new__(cls, *args, **kwargs): if not hasattr(cls, '_instance'): cls._instance = super(Singleton, cls).__new__(cls, *args, **kwargs) return cls._instance class Foo(Singleton): pass foo1 = Foo() foo2 = Foo() print foo1 is foo2 # True
方法三:使用元類
元類(參考:深刻理解Python中的元類)是用于創(chuàng)建類對(duì)象的類,類對(duì)象創(chuàng)建實(shí)例對(duì)象時(shí)一定會(huì)調(diào)用__call__方法,因此在調(diào)用__call__時(shí)候保證始終只創(chuàng)建一個(gè)實(shí)例即可,type是python中的一個(gè)元類。
class Singleton(type): def __call__(cls, *args, **kwargs): if not hasattr(cls, '_instance'): cls._instance = super(Singleton, cls).__call__(*args, **kwargs) return cls._instance class Foo(object): __metaclass__ = Singleton foo1 = Foo() foo2 = Foo() print foo1 is foo2 # True
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
- python 實(shí)現(xiàn)單例模式的5種方法
- Python單例模式的四種創(chuàng)建方式實(shí)例解析
- python單例模式原理與創(chuàng)建方法實(shí)例分析
- python單例模式的多種實(shí)現(xiàn)方法
- 聊聊python里如何用Borg pattern實(shí)現(xiàn)的單例模式
- Python下簡(jiǎn)易的單例模式詳解
- Python中實(shí)現(xiàn)單例模式的n種方式和原理
- python單例模式獲取IP代理的方法詳解
- Python中單例模式總結(jié)
- Python單例模式實(shí)例詳解
- python 6種方法實(shí)現(xiàn)單例模式
相關(guān)文章
從運(yùn)行效率與開(kāi)發(fā)效率比較Python和C++
今天小編就為大家分享一篇關(guān)于從運(yùn)行效率與開(kāi)發(fā)效率比較Python和C++,小編覺(jué)得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來(lái)看看吧2018-12-12
Python利用txt文件對(duì)Mysql進(jìn)行增刪改查移
這篇文章主要介紹了如何在Python中利用TXT文件對(duì)Mysql中的記錄進(jìn)行增刪改查移,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)學(xué)習(xí)2021-12-12
Python調(diào)用高德API實(shí)現(xiàn)批量地址轉(zhuǎn)經(jīng)緯度并寫(xiě)入表格的功能
這篇文章主要介紹了Python調(diào)用高德API實(shí)現(xiàn)批量地址轉(zhuǎn)經(jīng)緯度并寫(xiě)入表格的功能,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2021-01-01
TensorFlow基本的常量、變量和運(yùn)算操作詳解
今天小編就為大家分享一篇TensorFlow基本的常量、變量和運(yùn)算操作詳解,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2020-02-02
Python實(shí)現(xiàn)遍歷包含大量文件的文件夾
在處理大模型的訓(xùn)練數(shù)據(jù)時(shí),經(jīng)常需要遍歷大型文件夾,其中,可能包括數(shù)千萬(wàn)或數(shù)億個(gè)文件,所以本文為大家整理了Python遍歷包含大量文件的文件夾的方法,希望對(duì)大家有所幫助2023-04-04
Numpy實(shí)現(xiàn)卷積神經(jīng)網(wǎng)絡(luò)(CNN)的示例
這篇文章主要介紹了Numpy實(shí)現(xiàn)卷積神經(jīng)網(wǎng)絡(luò)(CNN)的示例,幫助大家更好的理解和使用Numpy,感興趣的朋友可以了解下2020-10-10
使用Python實(shí)現(xiàn)一個(gè)優(yōu)雅的異步定時(shí)器
在 Python 中實(shí)現(xiàn)定時(shí)器功能是一個(gè)常見(jiàn)需求,尤其是在需要周期性執(zhí)行任務(wù)的場(chǎng)景下,本文給大家介紹了基于 asyncio 和 threading 模塊,可擴(kuò)展的異步定時(shí)器實(shí)現(xiàn),需要的朋友可以參考下2025-04-04

