久久福利_99r_国产日韩在线视频_直接看av的网站_中文欧美日韩_久久一

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

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

瀏覽:6日期: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 編程
相關文章:
主站蜘蛛池模板: 99re热精品视频 | 午夜视频在线观看网站 | 日韩精品视频免费在线观看 | 中文字幕网在线 | 国产精品成人国产乱一区 | 亚洲嫩草 | 99在线免费视频 | 欧美激情视频一区二区三区在线播放 | 激情综合五月 | 欧美精品一区二区三区蜜桃视频 | 成人福利在线 | 日本久久久久久 | 在线观看免费黄色片 | 日韩欧美a级v片免费播放 | 亚洲美女精品视频 | 九九视频网 | 在线观看免费av网 | 国产色网站 | 国产极品探花 | 成人黄色片网站 | 人人人人人你人人人人人 | 国产一级片在线播放 | 亚洲视频一区二区三区 | 亚洲成人精品 | 依人久久 | 国产2区| 欧美日本国产 | h网站在线观看 | 99成人| 日韩成人在线观看 | 欧美日韩视频在线观看免费 | 中文字幕在线观看www | 国产精品久久久 | 天天干天天爽 | 亚洲福利在线播放 | 一级欧美日韩 | 日韩一区二区观看 | 91免费在线看 | 日本妇人成熟免费视频 | 亚洲九九 | 国产精品成人国产乱一区 |