亚洲精品久久久中文字幕-亚洲精品久久片久久-亚洲精品久久青草-亚洲精品久久婷婷爱久久婷婷-亚洲精品久久午夜香蕉

您的位置:首頁技術文章
文章詳情頁

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

瀏覽:2日期:2022-07-10 10:21:09

一、classmethod裝飾器

# 全局變量ip = ’192.168.13.98’port = ’3306’class MySQL: __instance = None def __init__(self, ip, port): self.ip = ip self.port = port @classmethod def instance(cls, *args, **kwargs): if args or kwargs: cls.__instance = cls(*args, **kwargs) return cls.__instance obj1 = MySQL.instance(ip, port)obj2 = MySQL.instance()obj3 = MySQL.instance()print(obj1)print(obj2, obj2.__dict__)print(obj3, obj3.__dict__)

輸出結果

<main.MySQL object at 0x058D6F30><main.MySQL object at 0x058D6F30> {’ip’: ’192.168.13.98’, ’port’: ’3306’}<main.MySQL object at 0x058D6F30> {’ip’: ’192.168.13.98’, ’port’: ’3306’}

二、類的裝飾器

def singlegon(cls): _instance = cls(ip, port) def wrapper(*args, **kwargs): if args or kwargs: return cls(*args, **kwargs) return _instance return wrapper @singlegonclass MySQL1: def __init__(self, ip, port): self.ip = ip self.port = port obj1 = MySQL1()obj2 = MySQL1()obj3 = MySQL1(’1.1.1.3’, 8080)print(obj1)print(obj2, obj2.__dict__)print(obj3, obj3.__dict__)

運行結果

<main.MySQL1 object at 0x04C102B0><main.MySQL1 object at 0x04C102B0> {’ip’: ’192.168.13.98’, ’port’: ’3306’}<main.MySQL1 object at 0x04C10310> {’ip’: ’1.1.1.3’, ’port’: 8080}

三、元類

class Mymetaclass(type): def __init__(self, class_name, class_bases, class_dic): super().__init__(class_name, class_bases, class_dic) self.__instance = self(ip, port) def __call__(self, *args, **kwargs): if args or kwargs: obj = self.__new__(self) self.__init__(obj, *args, **kwargs) self.__instance = obj return self.__instance class MySQL2(metaclass=Mymetaclass): def __init__(self, ip, port): self.ip = ip self.port = port obj1 = MySQL2()obj2 = MySQL2()obj3 = MySQL2(’1.1.1.3’, 80)print(obj1)print(obj2, obj2.__dict__)print(obj3, obj3.__dict__)

運行結果

<main.MySQL2 object at 0x04D003B0><main.MySQL2 object at 0x04D003B0> {’ip’: ’192.168.13.98’, ’port’: ’3306’}<main.MySQL2 object at 0x04D003D0> {’ip’: ’1.1.1.3’, ’port’: 80}

四、模塊導入

# instance.py class MySQL: def __init__(self, ip, port): self.ip = ip self.port = port ip = ’192.168.13.98’port = 3306instance = MySQL(ip, port) # 測試代碼import os, sys sys.path.append(os.path.dirname(os.path.dirname(__file__)))from test import instance obj1 = instance.instanceobj2 = instance.instanceobj3 = instance.MySQL(’1.1.1.3’, 80)print(obj1)print(obj2, obj2.__dict__)print(obj3, obj3.__dict__)

運行結果

<day30.instance.MySQL object at 0x052B0AB0><day30.instance.MySQL object at 0x052B0AB0> {’ip’: ’192.168.13.98’, ’port’: 3306}<day30.instance.MySQL object at 0x052B03F0> {’ip’: ’1.1.1.3’, ’port’: 80}

五、重寫__new__()

class MySQL3(object): __instance = None __first_init = True def __init__(self, ip, port): if self.__first_init: self.ip = ip self.port = port self.__first_init = False def __new__(cls, *args, **kwargs): if not cls.__instance: cls.__instance = object.__new__(cls) return cls.__instance obj1 = MySQL3(ip, port)obj2 = MySQL3(ip, port)obj3 = MySQL3(’1.1.1.3’, 80)print(obj1)print(obj2, obj2.__dict__)print(obj3, obj3.__dict__)

運行結果

<main.MySQL3 object at 0x059603F0><main.MySQL3 object at 0x059603F0> {’ip’: ’192.168.13.98’, ’port’: ’3306’, ’_MySQL3__first_init’: False}<main.MySQL3 object at 0x059603F0> {’ip’: ’192.168.13.98’, ’port’: ’3306’, ’_MySQL3__first_init’: False}

注:前四種可以實現單例模式,但都不是絕對單例模式,可以創建新的對象,但是第五種方式是絕對單例模式,全局只能真正創建一次對象

以上就是python 實現單例模式的5種方法的詳細內容,更多關于python 單例模式的資料請關注好吧啦網其它相關文章!

標簽: Python 編程
相關文章:
主站蜘蛛池模板: 国产精彩对白综合视频 | 香蕉视频99 | 三级精品视频在线播放 | 国产精品久久久精品三级 | 国产精品久久成人影院 | 91久久综合九色综合欧美亚洲 | 国产一区二区在线播放 | 国产在线观看91精品2022 | 国产一级做a爱片久久毛片a | 日韩视频不卡 | 182tv午夜线路一线路二 | 黄色网址免费在线播放 | 麻豆精品视频在线原创 | 久久受www免费人成看片 | 久久蜜月 | 免费啪 | 精品无码三级在线观看视频 | 三级黄色毛片网站 | 欧美一级毛片不卡免费观看 | 亚洲国产成a人v在线观看 | 久久精品国产99精品国产2021 | 日韩免费一区二区三区 | 性做爰片免费视频毛片中文ilo | 亚洲日韩成人 | 亚洲欧洲日产国码久在线观看 | 国产综合久久一区二区三区 | 中文字幕有码热在线视频 | 91不卡在线精品国产 | 亚洲精品日本一区二区在线 | 国产无遮挡裸体免费视频在线观看 | 五月久久噜噜噜色影 | 91青青草视频在线观看 | 国产人在线成免费视频麻豆 | 一级视频在线 | 久久99精品久久久久子伦小说 | 三级三级三级网站网址 | 99久久99这里只有免费费精品 | 一级一毛片a级毛片 | 国产精选91热在线观看 | 尤物蜜芽福利国产污在线观看 | 婷婷伊人|