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

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

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

基本介紹

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

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

特點:全局唯一,允許更改

優(yōu)缺點

優(yōu)點:

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

缺點:

  • 沒有接口,不能繼承,與單一職責原則沖突,一個類應該只關心內部邏輯,而不關心外面怎么樣來實例化

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))

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

相關文章

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

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

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

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

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

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

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

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

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

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

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

    詳解Python圖像處理中內存泄漏的問題解決方法

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

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

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

    在Python中進行CSV文件的讀取與寫入操作

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

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

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

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

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

最新評論