亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

Python實現(xiàn)單例模式的5種方法

 更新時間:2021年06月15日 09:37:29   作者:云崖先生  
單例模式應(yīng)該是應(yīng)用最廣泛,實現(xiàn)最簡單的一種創(chuàng)建型模式。本文詳細(xì)的介紹了Python實現(xiàn)單例模式的5種方法,具有一定的參考價值,感興趣的小伙伴們可以參考一下

基本介紹

一個對象只允許被一次創(chuàng)建,一個類只能創(chuàng)建一個對象,并且提供一個全局訪問點(diǎn)。

單例模式應(yīng)該是應(yīng)用最廣泛,實現(xiàn)最簡單的一種創(chuàng)建型模式。

特點(diǎn):全局唯一,允許更改

優(yōu)缺點(diǎn)

優(yōu)點(diǎn):

  • 避免對資源的多重占用,如寫入文件操作
  • 節(jié)省內(nèi)存
  • 防止命名空間被污染

缺點(diǎn):

  • 沒有接口,不能繼承,與單一職責(zé)原則沖突,一個類應(yīng)該只關(guān)心內(nèi)部邏輯,而不關(guān)心外面怎么樣來實例化

Python實現(xiàn)

方式1,元類實現(xiàn):

class MetaClass(type):
    def __call__(self, *args, **kwargs):
        """
        self : class Singleton
        """
        if not hasattr(self, "ins"):
            insObject = super(__class__, self).__call__(*args, **kwargs)
            setattr(self, "ins", insObject)
        return getattr(self, "ins")


class Singleton(object, metaclass=MetaClass):
    pass


if __name__ == "__main__":
    ins = Singleton()
    print(id(ins))
    ins = Singleton()
    print(id(ins))

方式2,繼承實現(xiàn):

class ParentClass:
    def __new__(cls, *args, **kwargs) -> object:
        """
        cls : class Singeton
        """
        if not hasattr(cls, "ins"):
            insObject = super(__class__, cls).__new__(cls, *args, **kwargs)
            setattr(cls, "ins", insObject)
        return getattr(cls, "ins")


class Singleton(ParentClass):
    pass


if __name__ == "__main__":
    ins = Singleton()
    print(id(ins))
    ins = Singleton()
    print(id(ins))

方式3,裝飾器實現(xiàn):

def warpper(clsObject):
    def inner(*args, **kwargs):
        if not hasattr(clsObject, "ins"):
            insObject = clsObject(*args, **kwargs)
            setattr(clsObject, "ins", insObject)
        return getattr(clsObject, "ins")
    return inner


@warpper
class Singleton:
    pass


if __name__ == "__main__":
    ins = Singleton()
    print(id(ins))
    ins = Singleton()
    print(id(ins))

方式4,模塊實現(xiàn):

- foo.py --> ins = Singleton()
- bar.py --> from foo import ins

方式5,@classmethod實現(xiàn)單例模式:

class Singleton:

    @classmethod
    def getSingletonInstanceObject(cls, *args, **kwargs):
        if not hasattr(cls, "ins"):
            insObject = cls(*args, **kwargs)
            setattr(cls, "ins", insObject)
        return getattr(cls, "ins")


if __name__ == "__main__":
    ins = Singleton.getSingletonInstanceObject()
    print(id(ins))
    ins = Singleton.getSingletonInstanceObject()
    print(id(ins))

到此這篇關(guān)于Python實現(xiàn)單例模式的5種方法的文章就介紹到這了,更多相關(guān)Python 單例模式內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Python中實現(xiàn)WebSocket的示例詳解

    Python中實現(xiàn)WebSocket的示例詳解

    WebSocket 是一種計算機(jī)通信協(xié)議,它為客戶端和服務(wù)器之間的雙向通信提供了一個全雙工的通道,本篇文章將詳解 Python 中如何實現(xiàn) WebSocket,感興趣的可以了解下
    2025-03-03
  • Python格式化輸出字符串的五種方法總結(jié)

    Python格式化輸出字符串的五種方法總結(jié)

    Python語言有許多優(yōu)點(diǎn),常用于不同的領(lǐng)域,如數(shù)據(jù)科學(xué)、web開發(fā)、自動化運(yùn)維等。本文將學(xué)習(xí)如何使用字符串中內(nèi)置的方法來格式化字符串,感興趣的可以了解一下
    2022-06-06
  • python實戰(zhàn)游戲之史上最難最虐的掃雷游戲沒有之一

    python實戰(zhàn)游戲之史上最難最虐的掃雷游戲沒有之一

    這篇文章主要介紹了使用 python 實現(xiàn)掃雷游戲,不同于傳統(tǒng)過時的掃雷,今天我們用 Python 增加了新花樣,文中給大家介紹的非常詳細(xì),需要的朋友可以參考下
    2021-09-09
  • Python在PDF中添加或刪除超鏈接的操作

    Python在PDF中添加或刪除超鏈接的操作

    PDF文件現(xiàn)已成為文檔存儲和分發(fā)的首選格式,然而,PDF文件的靜態(tài)特性有時會限制其交互性,超鏈接是提高PDF文件互動性和用戶體驗的關(guān)鍵元素,本文將詳細(xì)介紹如何使用第三方庫Spire.PDF for Python來進(jìn)行這些操作,需要的朋友可以參考下
    2024-12-12
  • Python實現(xiàn)拷貝多個文件到同一目錄的方法

    Python實現(xiàn)拷貝多個文件到同一目錄的方法

    這篇文章主要介紹了Python實現(xiàn)拷貝多個文件到同一目錄的方法,涉及Python針對文件與目錄的遍歷、復(fù)制等相關(guān)操作技巧,需要的朋友可以參考下
    2016-09-09
  • 詳解Python圖像處理中內(nèi)存泄漏的問題解決方法

    詳解Python圖像處理中內(nèi)存泄漏的問題解決方法

    在Python編程中,尤其是在圖像處理領(lǐng)域,內(nèi)存泄漏是一個不容忽視的問題,本文將深入探討Python為何容易發(fā)生內(nèi)存泄漏,以及如何有效檢測和解決,希望對大家有所幫助
    2025-02-02
  • pandas DataFrame 交集并集補(bǔ)集的實現(xiàn)

    pandas DataFrame 交集并集補(bǔ)集的實現(xiàn)

    這篇文章主要介紹了pandas DataFrame 交集并集補(bǔ)集的實現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-06-06
  • 在Python中進(jìn)行CSV文件的讀取與寫入操作

    在Python中進(jìn)行CSV文件的讀取與寫入操作

    本文詳細(xì)介紹了如何在Python中使用csv模塊進(jìn)行CSV文件的讀取和寫入,包括基本用法和高級功能,如DictWriter和DictReader,以及注意事項,需要的朋友可以參考下
    2025-03-03
  • pytorch 禁止/允許計算局部梯度的操作

    pytorch 禁止/允許計算局部梯度的操作

    這篇文章主要介紹了pytorch 禁止/允許計算局部梯度的操作,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2021-05-05
  • Python練習(xí)之操作MySQL數(shù)據(jù)庫

    Python練習(xí)之操作MySQL數(shù)據(jù)庫

    這篇文章主要介紹了Python練習(xí)之操作MySQL數(shù)據(jù)庫,文章通過如何創(chuàng)建MySQL數(shù)據(jù)表?如何向MySQL表中插入數(shù)據(jù)?如何查詢MySQL中的數(shù)據(jù)?的三個問題展開了詳細(xì)的內(nèi)容介紹
    2022-06-06

最新評論