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

Python實(shí)現(xiàn)單例模式的四種方式詳解

 更新時(shí)間:2022年05月18日 09:48:21   作者:玩轉(zhuǎn)測(cè)試開(kāi)發(fā)  
單例模式可以保證一個(gè)類僅有一個(gè)實(shí)例,并提供一個(gè)訪問(wèn)它的全局訪問(wèn)點(diǎn)。本文為大家介紹了Python實(shí)現(xiàn)單例模式的四種方式,需要的可以參考一下

簡(jiǎn)介:?jiǎn)卫J娇梢员WC一個(gè)類僅有一個(gè)實(shí)例,并提供一個(gè)訪問(wèn)它的全局訪問(wèn)點(diǎn)。適用性于當(dāng)類只能有一個(gè)實(shí)例而且客戶可以從一個(gè)眾所周知的訪問(wèn)點(diǎn)訪問(wèn)它,例如訪問(wèn)數(shù)據(jù)庫(kù)、MQ等。

實(shí)現(xiàn)方式:

1、通過(guò)導(dǎo)入模塊實(shí)現(xiàn)

2、通過(guò)裝飾器實(shí)現(xiàn)

3、通過(guò)使用類實(shí)現(xiàn)

4、通過(guò)__new__ 方法實(shí)現(xiàn)

單例模塊方式被導(dǎo)入的源碼:singleton.py

# -*- coding: utf-8 -*-
# time: 2022/5/17 10:31
# file: singleton.py
# author: tom
# 公眾號(hào): 玩轉(zhuǎn)測(cè)試開(kāi)發(fā)


class Singleton(object):
    def __init__(self, name):
        self.name = name

    def run(self):
        print(self.name)

s = Singleton("Tom")

主函數(shù)源碼:

# -*- coding: utf-8 -*-
# time: 2022/5/17 10:51
# file: test_singleton.py
# author: tom
# 公眾號(hào): 玩轉(zhuǎn)測(cè)試開(kāi)發(fā)
from singleton import s as s1
from singleton import s as s2


# Method One:通過(guò)導(dǎo)入模塊實(shí)現(xiàn)
def show_method_one():
    """

    :return:
    """
    print(s1)
    print(s2)
    print(id(s1))
    print(id(s2))


show_method_one()


# Method Two:通過(guò)裝飾器實(shí)現(xiàn)
def singleton(cls):
    # 創(chuàng)建一個(gè)字典用來(lái)保存類的實(shí)例對(duì)象
    _instance = {}

    def _singleton(*args, **kwargs):
        # 先判斷這個(gè)類有沒(méi)有對(duì)象
        if cls not in _instance:
            _instance[cls] = cls(*args, **kwargs)  # 創(chuàng)建一個(gè)對(duì)象,并保存到字典當(dāng)中
        # 將實(shí)例對(duì)象返回
        return _instance[cls]

    return _singleton


@singleton
class Demo2(object):
    a = 1

    def __init__(self, x=0):
        self.x = x


a1 = Demo2(1)
a2 = Demo2(2)
print(id(a1))
print(id(a2))


# Method Three:通過(guò)使用類實(shí)現(xiàn)
class Demo3(object):
    # 靜態(tài)變量
    _instance = None
    _flag = False

    def __new__(cls, *args, **kwargs):
        if cls._instance is None:
            cls._instance = super().__new__(cls)
        return cls._instance

    def __init__(self):
        if not Demo3._flag:
            Demo3._flag = True


b1 = Demo3()
b2 = Demo3()
print(id(b1))
print(id(b2))


# Method Four:通過(guò)__new__ 方法實(shí)現(xiàn)
class Demo4:
    def __new__(cls, *args, **kwargs):
        if not hasattr(cls, '_instance'):
            cls._instance = super(Demo4, cls).__new__(cls)
        return cls._instance


c1 = Demo4()
c2 = Demo4()
print(id(c1))
print(id(c2))

運(yùn)行結(jié)果:

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

相關(guān)文章

  • Pytorch中.detach()與.data的用法小結(jié)

    Pytorch中.detach()與.data的用法小結(jié)

    這篇文章主要介紹了Pytorch中.detach()與.data的用法,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2023-07-07
  • python繪圖方法實(shí)例入門

    python繪圖方法實(shí)例入門

    這篇文章主要介紹了python繪圖方法,實(shí)例分析了Python的繪圖技巧,涉及Python中matplotlib模塊的使用方法,需要的朋友可以參考下
    2015-05-05
  • Python進(jìn)行統(tǒng)計(jì)建模

    Python進(jìn)行統(tǒng)計(jì)建模

    這篇文章主要介紹了Python進(jìn)行統(tǒng)計(jì)建模的方法,幫助大家更好的理解和學(xué)習(xí)Python,感興趣的朋友可以了解下
    2020-08-08
  • Python3使用騰訊云文字識(shí)別(騰訊OCR)提取圖片中的文字內(nèi)容實(shí)例詳解

    Python3使用騰訊云文字識(shí)別(騰訊OCR)提取圖片中的文字內(nèi)容實(shí)例詳解

    這篇文章主要介紹了Python3使用騰訊云文字識(shí)別(騰訊OCR)提取圖片中的文字內(nèi)容方法詳解,需要的朋友可以參考下
    2020-02-02
  • Python戀愛(ài)小助手之必拿下

    Python戀愛(ài)小助手之必拿下

    小編有個(gè)好兄弟最近在追妹子,跟妹子打得火熱!就差臨門一腳了,這一jio我?guī)兔ρa(bǔ)上去了!他問(wèn)有沒(méi)有什么酷炫的表白方式,想要一次成功,表白的方式有許多種今天小編來(lái)給大家?guī)?lái)兩個(gè)不得不同意的表白代碼
    2021-10-10
  • Python API 自動(dòng)化實(shí)戰(zhàn)詳解(純代碼)

    Python API 自動(dòng)化實(shí)戰(zhàn)詳解(純代碼)

    今天小編就為大家分享一篇Python API 自動(dòng)化實(shí)戰(zhàn)詳解(純代碼),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2019-06-06
  • python re模塊匹配貪婪和非貪婪模式詳解

    python re模塊匹配貪婪和非貪婪模式詳解

    這篇文章主要介紹了python re模塊匹配貪婪和非貪婪模式詳解,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-02-02
  • Django+Ajax+jQuery實(shí)現(xiàn)網(wǎng)頁(yè)動(dòng)態(tài)更新的實(shí)例

    Django+Ajax+jQuery實(shí)現(xiàn)網(wǎng)頁(yè)動(dòng)態(tài)更新的實(shí)例

    今天小編就為大家分享一篇Django+Ajax+jQuery實(shí)現(xiàn)網(wǎng)頁(yè)動(dòng)態(tài)更新的實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2018-05-05
  • Python生產(chǎn)者與消費(fèi)者模型中的優(yōu)勢(shì)介紹

    Python生產(chǎn)者與消費(fèi)者模型中的優(yōu)勢(shì)介紹

    這篇文章主要介紹了python多進(jìn)程中的生產(chǎn)者和消費(fèi)者模型優(yōu)勢(shì),生產(chǎn)者是指生產(chǎn)數(shù)據(jù)的任務(wù),消費(fèi)者是指消費(fèi)數(shù)據(jù)的任務(wù)。當(dāng)生產(chǎn)者的生產(chǎn)能力遠(yuǎn)大于消費(fèi)者的消費(fèi)能力,生產(chǎn)者就需要等消費(fèi)者消費(fèi)完才能繼續(xù)生產(chǎn)新的數(shù)據(jù)
    2023-03-03
  • python3中函數(shù)參數(shù)的四種簡(jiǎn)單用法

    python3中函數(shù)參數(shù)的四種簡(jiǎn)單用法

    這篇文章主要介紹了python3中函數(shù)參數(shù)的四種簡(jiǎn)單用法,非常不錯(cuò),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2018-07-07

最新評(píng)論