欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

簡(jiǎn)單了解python單例模式的幾種寫法

 更新時(shí)間:2019年07月01日 08:53:05   作者:FOOFISH-PYTHON之禪  
這篇文章主要介紹了簡(jiǎn)單了解python單例模式的幾種寫法,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下

方法一:使用裝飾器

裝飾器維護(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ì)象的方法,所以重寫基類的__new__方法,以此來保證創(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í)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • Python如何快速上手? 快速掌握一門新語(yǔ)言的方法

    Python如何快速上手? 快速掌握一門新語(yǔ)言的方法

    Python如何快速上手? 這篇文章主要為大家詳細(xì)介紹了快速掌握一門新語(yǔ)言的方法,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-11-11
  • Python解決N階臺(tái)階走法問題的方法分析

    Python解決N階臺(tái)階走法問題的方法分析

    這篇文章主要介紹了Python解決N階臺(tái)階走法問題的方法,簡(jiǎn)單描述了走臺(tái)階問題,并結(jié)合實(shí)例形式分析了Python使用遞歸與遞推算法解決走臺(tái)階問題的相關(guān)操作技巧,需要的朋友可以參考下
    2017-12-12
  • 淺析Python 中的 WSGI 接口和 WSGI 服務(wù)的運(yùn)行

    淺析Python 中的 WSGI 接口和 WSGI 服務(wù)的運(yùn)行

    這篇文章主要介紹了Python 中的 WSGI 接口和 WSGI 服務(wù)的相關(guān)資料,幫助大家更好的理解和使用python,感興趣的朋友可以了解下
    2020-12-12
  • Pycharm plot獨(dú)立窗口顯示的操作

    Pycharm plot獨(dú)立窗口顯示的操作

    這篇文章主要介紹了Pycharm plot獨(dú)立窗口顯示的操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2020-12-12
  • Python中itertools模塊的使用教程詳解

    Python中itertools模塊的使用教程詳解

    itertools是python內(nèi)置的模塊,使用簡(jiǎn)單且功能強(qiáng)大。本文將詳細(xì)為大家講解一下itertools模塊的使用方法,感興趣的小伙伴可以學(xué)習(xí)一下
    2022-05-05
  • wxPython電子表格功能wx.grid實(shí)例教程

    wxPython電子表格功能wx.grid實(shí)例教程

    這篇文章主要介紹了wxPython電子表格功能wx.grid實(shí)例教程,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2019-11-11
  • pycharm2021激活碼使用教程(永久激活親測(cè)可用)

    pycharm2021激活碼使用教程(永久激活親測(cè)可用)

    pycharm2021激活碼是一個(gè)可以輕松幫助用戶免費(fèi)激活pycharm2021.1軟件的文件,雖然說pycharm現(xiàn)在只是推出了2021.1的EAP版,但是如果你想先率先體驗(yàn)一波,那么就可以利用小編提供的這個(gè)激活碼來進(jìn)行使用啦,并這個(gè)激活碼是永久有效的
    2021-03-03
  • Python使用matplotlib給柱狀圖添加數(shù)據(jù)標(biāo)簽bar_label()

    Python使用matplotlib給柱狀圖添加數(shù)據(jù)標(biāo)簽bar_label()

    這篇文章主要介紹了Python使用matplotlib給柱狀圖添加數(shù)據(jù)標(biāo)簽bar_label(),記錄如何用使用matplotlib給柱狀圖添加數(shù)據(jù)標(biāo)簽,是以matplotlib.pyplot.bar_label()為例,需要的朋友可以參考一下
    2022-03-03
  • 詳解python實(shí)現(xiàn)讀取郵件數(shù)據(jù)并下載附件的實(shí)例

    詳解python實(shí)現(xiàn)讀取郵件數(shù)據(jù)并下載附件的實(shí)例

    這篇文章主要介紹了詳解python讀取郵件數(shù)據(jù)并下載附件的實(shí)例的相關(guān)資料,這里提供實(shí)現(xiàn)實(shí)例,幫助大家學(xué)習(xí)理解這部分內(nèi)容,需要的朋友可以參考下
    2017-08-08
  • pycharm連接虛擬機(jī)的實(shí)現(xiàn)步驟

    pycharm連接虛擬機(jī)的實(shí)現(xiàn)步驟

    本文主要介紹了pycharm連接虛擬機(jī)的實(shí)現(xiàn)步驟,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-12-12

最新評(píng)論