婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av

主頁 > 知識庫 > Python實現單例模式的5種方法

Python實現單例模式的5種方法

熱門標簽:南陽打電話機器人 ai電銷機器人的優勢 地圖標注自己和別人標注區別 聊城語音外呼系統 騰訊地圖標注沒法顯示 打電話機器人營銷 孝感營銷電話機器人效果怎么樣 海外網吧地圖標注注冊 商家地圖標注海報

基本介紹

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

單例模式應該是應用最廣泛,實現最簡單的一種創建型模式。

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

優缺點

優點:

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

缺點:

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

Python實現

方式1,元類實現:

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,繼承實現:

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,裝飾器實現:

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,模塊實現:

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

方式5,@classmethod實現單例模式:

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實現單例模式的5種方法的文章就介紹到這了,更多相關Python 單例模式內容請搜索腳本之家以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持腳本之家!

您可能感興趣的文章:
  • python 6種方法實現單例模式
  • python 實現單例模式的5種方法
  • python單例模式的多種實現方法
  • 詳解python實現線程安全的單例模式
  • 基于Python中單例模式的幾種實現方式及優化詳解
  • Python單例模式的兩種實現方法
  • 5種Python單例模式的實現方式
  • 常見的在Python中實現單例模式的三種方法

標簽:楊凌 揚州 牡丹江 六盤水 迪慶 聊城 南寧 撫州

巨人網絡通訊聲明:本文標題《Python實現單例模式的5種方法》,本文關鍵詞  Python,實現,單例,模式,的,;如發現本文內容存在版權問題,煩請提供相關信息告之我們,我們將及時溝通與處理。本站內容系統采集于網絡,涉及言論、版權與本站無關。
  • 相關文章
  • 下面列出與本文章《Python實現單例模式的5種方法》相關的同類信息!
  • 本頁收集關于Python實現單例模式的5種方法的相關信息資訊供網民參考!
  • 推薦文章
    主站蜘蛛池模板: 清涧县| 应城市| 龙海市| 光泽县| 连江县| 都安| 双江| 凤城市| 梅州市| 西乌珠穆沁旗| 庆阳市| 抚远县| 玛曲县| 轮台县| 慈利县| 虹口区| 仙居县| 金昌市| 壶关县| 雷山县| 福清市| 思南县| 棋牌| 牙克石市| 南通市| 济宁市| 阿克苏市| 增城市| 利川市| 阿荣旗| 利川市| 岳池县| 象州县| 天峨县| 凯里市| 息烽县| 海盐县| 怀仁县| 新津县| 酉阳| 湖北省|