最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

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

基本介紹

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

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

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

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

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

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

缺點(diǎn):

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

Python實(shí)現(xiàn)

方式1,元類實(shí)現(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,繼承實(shí)現(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,裝飾器實(shí)現(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,模塊實(shí)現(xiàn):

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

方式5,@classmethod實(shí)現(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實(shí)現(xiàn)單例模式的5種方法的文章就介紹到這了,更多相關(guān)Python 單例模式內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 在pyqt5中展示pyecharts生成的圖像問題

    在pyqt5中展示pyecharts生成的圖像問題

    本文通過一個(gè)實(shí)際的散點(diǎn)圖案例,展示了如何使用pyqt5嵌套一個(gè)pyecharts圖層的方法,通過這個(gè)技巧,可以在pyqt5的框架中也實(shí)現(xiàn)精美的數(shù)據(jù)可視化的功能模塊,感興趣的朋友一起看看吧
    2022-01-01
  • Python調(diào)用C語言程序方法解析

    Python調(diào)用C語言程序方法解析

    這篇文章主要介紹了Python調(diào)用C語言程序方法解析,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-07-07
  • PyQt5使用mimeData實(shí)現(xiàn)拖拽事件教程示例解析下

    PyQt5使用mimeData實(shí)現(xiàn)拖拽事件教程示例解析下

    這篇文章主要為大家介紹了PyQt5使用mimeData實(shí)現(xiàn)拖拽事件的教程示例解析,系列文章詳見文中跳轉(zhuǎn)鏈接,有需要的朋友可以借鑒參考下,希望能夠有所幫助
    2021-10-10
  • 全面解析python當(dāng)前路徑和導(dǎo)包路徑問題

    全面解析python當(dāng)前路徑和導(dǎo)包路徑問題

    這篇文章主要為大家介紹了python當(dāng)前路徑和導(dǎo)包路徑問題的全面解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-05-05
  • Python獲取文件夾下的所有文件路徑小結(jié)

    Python獲取文件夾下的所有文件路徑小結(jié)

    在Python編程過程中,需要獲取某一個(gè)文件目錄下的所有文件,或獲取文件目錄下的所有指定后綴名的文件等,本文主要介紹了Python獲取文件夾下的所有文件路徑,感興趣的可以了解一下
    2023-10-10
  • python批量設(shè)置多個(gè)Excel文件頁眉頁腳的腳本

    python批量設(shè)置多個(gè)Excel文件頁眉頁腳的腳本

    這篇文章主要介紹了python批量設(shè)置多個(gè)Excel文件頁眉頁腳的源碼,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-03-03
  • Django ManyToManyField 跨越中間表查詢的方法

    Django ManyToManyField 跨越中間表查詢的方法

    今天小編就為大家分享一篇Django ManyToManyField 跨越中間表查詢的方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2018-12-12
  • 使用tensorflow保存和恢復(fù)模型saver.restore

    使用tensorflow保存和恢復(fù)模型saver.restore

    這篇文章主要介紹了使用tensorflow保存和恢復(fù)模型saver.restore方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-02-02
  • 使用Python實(shí)現(xiàn)with結(jié)構(gòu)的@contextmanager方法詳解

    使用Python實(shí)現(xiàn)with結(jié)構(gòu)的@contextmanager方法詳解

    這篇文章主要介紹了使用Python實(shí)現(xiàn)with結(jié)構(gòu)的@contextmanager方法詳解,這個(gè)結(jié)構(gòu)的好處,一個(gè)是簡潔,一個(gè)是當(dāng)我們對(duì)文件操作的邏輯很長的時(shí)候,不會(huì)因?yàn)橥岁P(guān)閉文件而造成不必要的錯(cuò)誤,需要的朋友可以參考下
    2023-07-07
  • Python機(jī)器學(xué)習(xí)特征重要性分析的8個(gè)常用方法實(shí)例探究

    Python機(jī)器學(xué)習(xí)特征重要性分析的8個(gè)常用方法實(shí)例探究

    本文詳細(xì)介紹8種常用的方法,涵蓋了基于決策樹、集成學(xué)習(xí)模型以及統(tǒng)計(jì)學(xué)方法的特征重要性分析,從決策樹模型到SHAP值,深入探討每種方法的原理和示例,幫助全面了解如何評(píng)估特征的重要性,將能更好地理解特征對(duì)模型預(yù)測(cè)的貢獻(xiàn),為提升模型性能和解釋模型決策提供有力支持
    2024-01-01

最新評(píng)論

河间市| 永城市| 苍溪县| 密云县| 平江县| 闻喜县| 新邵县| 逊克县| 象州县| 波密县| 西城区| 芮城县| 塘沽区| 内丘县| 邢台县| 磴口县| 耿马| 金山区| 潍坊市| 邓州市| 长沙市| 凤冈县| 岑巩县| 丁青县| 宣恩县| 蒙山县| 高邮市| 衡水市| 独山县| 德安县| 丽水市| 黑山县| 北川| 东至县| 屯门区| 南安市| 乌拉特中旗| 湛江市| 行唐县| 镇赉县| 文昌市|