电脑知识|欧美黑人一区二区三区|软件|欧美黑人一级爽快片淫片高清|系统|欧美黑人狂野猛交老妇|数据库|服务器|编程开发|网络运营|知识问答|技术教程文章 - 好吧啦网

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

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

瀏覽:9日期: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 編程
相關文章:
主站蜘蛛池模板: 超细|超微气流粉碎机|气流磨|气流分级机|粉体改性机|磨粉机|粉碎设备-山东埃尔派粉体科技 | 西装定制/做厂家/公司_西装订做/制价格/费用-北京圣达信西装 | 丝杆升降机-不锈钢丝杆升降机-非标定制丝杆升降机厂家-山东鑫光减速机有限公司 | 塑料造粒机「厂家直销」-莱州鑫瑞迪机械有限公司 | 针焰试验仪,灼热丝试验仪,漏电起痕试验仪,水平垂直燃烧试验仪 - 苏州亚诺天下仪器有限公司 | 板框压滤机-隔膜压滤机-厢式压滤机生产厂家-禹州市君工机械设备有限公司 | 双相钢_双相不锈钢_双相钢圆钢棒_双相不锈钢报价「海新双相钢」 双能x射线骨密度检测仪_dxa骨密度仪_双能x线骨密度仪_品牌厂家【品源医疗】 | pbt头梳丝_牙刷丝_尼龙毛刷丝_PP塑料纤维合成毛丝定制厂_广州明旺 | 主题班会网 - 安全教育主题班会,各类主题班会PPT模板 | 全自动端子机|刺破式端子压接机|全自动双头沾锡机|全自动插胶壳端子机-东莞市傅氏兄弟机械设备有限公司 | 玉米深加工设备|玉米加工机械|玉米加工设备|玉米深加工机械-河南成立粮油机械有限公司 | 工业雾炮机_超细雾炮_远程抑尘射雾器-世纪润德环保设备 | 胀套-锁紧盘-风电锁紧盘-蛇形联轴器「厂家」-瑞安市宝德隆机械配件有限公司 | 防弹玻璃厂家_防爆炸玻璃_电磁屏蔽玻璃-四川大硅特玻科技有限公司 | 实木家具_实木家具定制_全屋定制_美式家具_圣蒂斯堡官网 | 【365公司转让网】公司求购|转让|资质买卖_股权转让交易平台 | 高通量组织研磨仪-多样品组织研磨仪-全自动组织研磨仪-研磨者科技(广州)有限公司 | 激光内雕_led玻璃_发光玻璃_内雕玻璃_导光玻璃-石家庄明晨三维科技有限公司 激光内雕-内雕玻璃-发光玻璃 | 注浆压力变送器-高温熔体传感器-矿用压力传感器|ZHYQ朝辉 | 贴板式电磁阀-不锈钢-气动上展式放料阀-上海弗雷西阀门有限公司 工业机械三维动画制作 环保设备原理三维演示动画 自动化装配产线三维动画制作公司-南京燃动数字 | 世界箱包品牌十大排名,女包小众轻奢品牌推荐200元左右,男包十大奢侈品牌排行榜双肩,学生拉杆箱什么品牌好质量好 - Gouwu3.com | 脱硝喷枪-氨水喷枪-尿素喷枪-河北思凯淋环保科技有限公司 | ge超声波测厚仪-电动涂膜机-电动划格仪-上海洪富 | 电线电缆厂家|沈阳电缆厂|电线厂|沈阳英联塑力线缆有限公司 | 大倾角皮带机-皮带输送机-螺旋输送机-矿用皮带输送机价格厂家-河南坤威机械 | 沙盘模型公司_沙盘模型制作公司_建筑模型公司_工业机械模型制作厂家 | 工业冷却塔维修厂家_方形不锈钢工业凉水塔维修改造方案-广东康明节能空调有限公司 | 澳门精准正版免费大全,2025新澳门全年免费,新澳天天开奖免费资料大全最新,新澳2025今晚开奖资料,新澳马今天最快最新图库-首页-东莞市傲马网络科技有限公司 | 茶楼装修设计_茶馆室内设计效果图_云臻轩茶楼装饰公司 | 气动球阀_衬氟蝶阀_调节阀_电动截止阀_上海沃托阀门有限公司 | 吉林污水处理公司,长春工业污水处理设备,净水设备-长春易洁环保科技有限公司 | 并离网逆变器_高频UPS电源定制_户用储能光伏逆变器厂家-深圳市索克新能源 | 骨灰存放架|骨灰盒寄存架|骨灰架厂家|智慧殡葬|公墓陵园管理系统|网上祭奠|告别厅智能化-厦门慈愿科技 | 山东led显示屏,山东led全彩显示屏,山东LED小间距屏,临沂全彩电子屏-山东亚泰视讯传媒有限公司 | 柔软云母板-硬质-水位计云母片组件-首页-武汉长丰云母绝缘材料有限公司 | 淘趣英语网 - 在线英语学习,零基础英语学习网站 | POS机办理_个人POS机免费领取 - 银联POS机申请首页 | 蓝米云-专注于高性价比香港/美国VPS云服务器及海外公益型免费虚拟主机 | 自恢复保险丝_贴片保险丝_力特保险丝_Littelfuse_可恢复保险丝供应商-秦晋电子 | 济南网站策划设计_自适应网站制作_H5企业网站搭建_济南外贸网站制作公司_锐尚 | 厂房出租_厂房出售_产业园区招商_工业地产&nbsp;-&nbsp;中工招商网 |