中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Python實現單例模式的方法有哪些

發布時間:2021-06-15 10:16:33 來源:億速云 閱讀:172 作者:小新 欄目:開發技術

這篇文章將為大家詳細講解有關Python實現單例模式的方法有哪些,小編覺得挺實用的,因此分享給大家做個參考,希望大家閱讀完這篇文章后可以有所收獲。

基本介紹

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

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

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

優缺點

優點:

  • 避免對資源的多重占用,如寫入文件操作

  • 節省內存

  • 防止命名空間被污染

缺點:

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

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實現單例模式的方法有哪些”這篇文章就分享到這里了,希望以上內容可以對大家有一定的幫助,使各位可以學到更多知識,如果覺得文章不錯,請把它分享出去讓更多的人看到。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

嘉定区| 白山市| 利辛县| 囊谦县| 灵丘县| 于田县| 遵义市| 罗山县| 青田县| 高清| 屏东县| 中方县| 土默特左旗| 佛教| 长沙县| 治县。| 乐都县| 兴城市| 黄石市| 道孚县| 南宫市| 罗源县| 高要市| 昭平县| 南漳县| 泰州市| 本溪市| 榆树市| 安国市| 临猗县| 新竹县| 阆中市| 蕉岭县| 宁武县| 象州县| 云和县| 定日县| 潮州市| 栾城县| 安化县| 惠东县|