最新要闻
- 当前播报:腊肉的保质期多长?
- 支持小米、OPPO!三星查询手机OLED屏幕网站上线:你用的啥屏?
- 通讯!第二代骁龙7+首次支持双5G双卡双通:4.4Gbps网速、Wi-Fi翻倍
- 观察:性能提升达2倍!真我GT Neo5 SE官宣搭载第二代骁龙7+
- 索尼背水一战!PS5 Pro已在路上
- 环球今热点:刹车失灵?福特全球召回近130万辆汽车
- 河南突降大雪:农户40亩葡萄棚被压塌、郑州多个仓库倒塌损失惨重
- 天天快看点丨卢伟冰现身高通发布会!Redmi全球首发第二代骁龙7+
- 动态焦点:性能提升2倍!高通正式发布第二代骁龙7+移动平台
- 天天快报!歌曲.在我心里没有谁能够代替你原唱_在我心里没有谁能代替你简谱歌谱
- 文心一言申请测试企业达7.6万 百度股价上涨近15%
- 锦心似玉林世显是什么身份?锦心似玉林世显的出场有什么作用吗?
- 人世间冯化成哪集出轨的?人世间冯化成最后的结局是什么?
- 环球头条:899元 雷蛇帝王蝶鼠标垫发布:钢化玻璃一体成型
- 天天微速讯:6岁女童看店 2人用98元买走60根虫草引热议:无耻不道德行为、交易无效
- 全球简讯:特斯拉不好惹!网红车评人“蔡老板”被判道歉赔10万后:维持原判 不得上诉
广告
手机
iphone11大小尺寸是多少?苹果iPhone11和iPhone13的区别是什么?
警方通报辅警执法直播中被撞飞:犯罪嫌疑人已投案
- iphone11大小尺寸是多少?苹果iPhone11和iPhone13的区别是什么?
- 警方通报辅警执法直播中被撞飞:犯罪嫌疑人已投案
- 男子被关545天申国赔:获赔18万多 驳回精神抚慰金
- 3天内26名本土感染者,辽宁确诊人数已超安徽
- 广西柳州一男子因纠纷杀害三人后自首
- 洱海坠机4名机组人员被批准为烈士 数千干部群众悼念
家电
python __new__方法与单例模式
(资料图片)
- 1、new()至少要有一个参数cls,代表当前类,此参数在实例时由python解释器自动识别,
- 2、new()必须要有返回值,返回实例化出来的实例,这点在自己实现__new__时要特别注意,可以 return父类new出来的实例, 如:return super().new(cls),或者直接return object.new(cls)
- 3、init有一个参数self,就是这个__new__()方法返回的实例, 可以完成一些其它初始化的动作,init不需要返回值(有返回值就会报错)
- 4、如果__new__()创建的是当前类的实例,会自动调用__init__()函数, 通过return语句里面调用的__new__(cls)函数的第一个参数是cls来保证是当前类实例, 如果是其他类的类名,那么实际创建返回的就是其他类的实例,其实就不会调用当前类的__init__()函数,也不会调用其他类的__init__()函数。
class A(object): def __init__(self): print("这是init方法:",self) def __new__(cls, *args, **kwargs): print("这是cls类本身的ID:",id(cls)) print("这是new方法:",object.__new__(cls)) # print("这是new方法:",super().__new__(cls)) # 跟上面那句本质一样,都是调用父类的new方法 return object.__new__(cls)A()print("这是A类的ID:",id(A))"""输出结果如下:这是cls类本身的ID: 2790056212288这是new方法: <__main__.A object at 0x000002899CB281C0>这是init方法: <__main__.A object at 0x000002899CB281C0>这是A类的ID: 2790056212288"""
单例模式(Singleton Pattern)是一种常用的软件设计模式,该模式的主要目的是确保某一个类只有一个实例存在。当你希望在整个系统中,某个类只能出现一个实例时,单例对象就能派上用场。
比如,某个服务器程序的配置信息存放在一个文件中,客户端通过一个 AppConfig 的类来读取配置文件的信息。如果在程序运行期间,有很多地方都需要使用配置文件的内容,也就是说,很多地方都需要创建 AppConfig 对象的实例,这就导致系统中存在多个 AppConfig 的实例对象,而这样会严重浪费内存资源,尤其是在配置文件内容很多的情况下。
事实上,类似 AppConfig 这样的类,我们希望在程序运行期间只存在一个实例对象。
实现单例模式:
- 使用模块
- 使用装饰器
- 使用类
- 基于 new方法实现
- 基于 metaclass 方式实现
1、使用模块
Python 的模块就是天然的单例模式
2、使用装饰器
def singleton(cls): _instance = dict() def _singleton(*args, **kwargs): if cls not in _instance: _instance[cls] = cls(*args, **kwargs) return _instance[cls] return _singleton@singletonclass A(object): a = 1 def __init__(self, x=0): self.x = xa1 = A(2)print(a1)a2 = A(3)print(a2)print(a1 is a2)
3、使用类
- 多线程单例模式
import timeimport threading class Singleton(object): _instance_lock = threading.Lock() def __init__(self): time.sleep(1) @classmethod def instance(cls, *args, **kwargs): if not hasattr(Singleton, "_instance"): with Singleton._instance_lock: if not hasattr(Singleton, "_instance"): Singleton._instance = Singleton(*args, **kwargs) return Singleton._instance def task(arg): obj = Singleton.instance() print(obj) for i in range(10): t = threading.Thread(target=task,args=[i,]) t.start() time.sleep(20)obj = Singleton.instance()print(obj)
4、基于 new方法实现
class Singleton(object): _instance = None def __new__(cls, *args, **kwargs): if not cls._instance: cls._instance = object.__new__(cls) return cls._instance
import threading class Singleton(object): _instance_lock = threading.Lock() def __init__(self): pass def __new__(cls, *args, **kwargs): if not hasattr(Singleton, "_instance"): with Singleton._instance_lock: if not hasattr(Singleton, "_instance"): Singleton._instance = object.__new__(cls) return Singleton._instance obj1 = Singleton()obj2 = Singleton()print(obj1,obj2) def task(arg): obj = Singleton() print(obj) for i in range(10): t = threading.Thread(target=task,args=[i,]) t.start()
基于 metaclass 方式实现
import threading class SingletonType(type): _instance_lock = threading.Lock() def __call__(cls, *args, **kwargs): if not hasattr(cls, "_instance"): with SingletonType._instance_lock: if not hasattr(cls, "_instance"): cls._instance = super(SingletonType,cls).__call__(*args, **kwargs) return cls._instance class Foo(metaclass=SingletonType): def __init__(self,name): self.name = name obj1 = Foo("name")obj2 = Foo("name")print(obj1,obj2)
关键词:
-
【快播报】Application Loader及Transporter App上传ipa外、可以在Windows上架iOS APP工具
编辑添加图片注释,不超过140字(可选)随着xcode的更新,苹果公司已经不直接提供ApplicationLoader这...
来源: python __new__方法与单例模式
【当前热闻】前端有边界,但低代码没有
【快播报】Application Loader及Transporter App上传ipa外、可以在Windows上架iOS APP工具
当前播报:腊肉的保质期多长?
法兴银行:欧洲央行加息对欧元区国家息差的影响越来越小
支持小米、OPPO!三星查询手机OLED屏幕网站上线:你用的啥屏?
通讯!第二代骁龙7+首次支持双5G双卡双通:4.4Gbps网速、Wi-Fi翻倍
观察:性能提升达2倍!真我GT Neo5 SE官宣搭载第二代骁龙7+
索尼背水一战!PS5 Pro已在路上
环球今热点:刹车失灵?福特全球召回近130万辆汽车
世界热资讯!使用代理以及搭建代理池
河南突降大雪:农户40亩葡萄棚被压塌、郑州多个仓库倒塌损失惨重
天天快看点丨卢伟冰现身高通发布会!Redmi全球首发第二代骁龙7+
动态焦点:性能提升2倍!高通正式发布第二代骁龙7+移动平台
环球快消息!前端使用EasyWasmPlayer.js接入hls协议h265编码视频
当前速讯:[EF Core] EF Core Code-First 移除外键 —— 重写SQL生成器
当前快看:带发行版 Logo 的系统信息显示工具
天天快报!歌曲.在我心里没有谁能够代替你原唱_在我心里没有谁能代替你简谱歌谱
文心一言申请测试企业达7.6万 百度股价上涨近15%
锦心似玉林世显是什么身份?锦心似玉林世显的出场有什么作用吗?
人世间冯化成哪集出轨的?人世间冯化成最后的结局是什么?
小米3的充电线是哪种头?小米3手机跑分是多少?
小天鹅洗衣机脱水不干是什么原因?小天鹅洗衣机24小时服务热线
热议:zynq基于DMA的串口传图
天龙八部单机版怎么下载?天龙八部单机版武功搭配
环球头条:899元 雷蛇帝王蝶鼠标垫发布:钢化玻璃一体成型
天天微速讯:6岁女童看店 2人用98元买走60根虫草引热议:无耻不道德行为、交易无效
全球简讯:特斯拉不好惹!网红车评人“蔡老板”被判道歉赔10万后:维持原判 不得上诉
落地成盒!苹果可折叠手机新专利:掉落自动闭合
环球观察:又一网红店翻车 半天妖烤鱼被曝垃圾桶捞回餐食又端上桌 你吃过没
今头条!python 排序算法
天天通讯!uni-app 实现轮播图组件父容器背景色随图片主题色改变
全球短讯!iQOO Z7对标旗舰配置:OIS光学防抖、NFC全都有
性价比领先RTX 3060多达78% Intel Arc新驱动优化《暗黑4》等游戏
造谣蔚来因质量失控酿车祸 车评人被判向蔚来道歉、赔偿8万元
全球快报:发放37亿元购车补贴 单车最高降价5万!上汽大众回应
焦点速读:58元 国产单机游戏《二分之一》正式发售:近百位角色 文本超25万字
【时快讯】好多人说驱鼠器不管用是真的吗为什么(好多人说驱鼠器不管用是真的吗)
热点在线丨前端操作cookie的用法
世界最新:数据湖选型指南|Hudi vs Iceberg 数据更新能力深度对比
快讯:全网最详细中英文ChatGPT接口文档(四)30分钟快速入门ChatGPT——Models模型
git回退到某个提交
世界微头条丨交易商协会对中航租赁予以通报批评
女子地铁上辱骂殴打男子 通报来了:拘留10天 罚款500
动物园母猴产后啃食夭折小猴 工作人员:有一定野性、比较常见
环球讯息:零百加速1.9秒 中国第一超跑埃安Hyper SSR量产已达50%
消息!别喝工业水啤了:熊猫精酿杀马特扯皮小麦啤酒6听19.9元大促
全球微速讯:20.98万起大杀四方 新款比亚迪唐DM-i、汉EV上市当日狂卖8196台
【全球聚看点】Java 枚举实现单例模式,线程安全又优雅!
天天讯息:前端设计模式——组合模式
全球快播:[issues] webrtc 接入SRS丢包率不正确问题
天天热资讯!你居然还不会判定表法?
资讯:【微电平台】-高并发实战经验-奇葩问题解决之旅
快递员骑摩托与特斯拉相撞当场身亡 现场惨烈:司机喊话车没失控
焦点短讯!大众最便宜电车来了!截胡特斯拉Model Q
天天要闻:生财有道?特斯拉圆形方向盘开卖:售价4800元
德系不装了!上汽大众全系车型开降:最多补贴5万元
当前热讯:超5000米 世界最高海拔风电场发电量超1亿度 中国再创纪录
【天天聚看点】济南遥墙国际机场二期改扩建工程项目房屋征收范围确定
每日时讯!Linux进程通信 | 消息队列
天天时讯:银行援助方案缓解市场担忧 美债收益率普遍回升
天天最资讯丨苏南硕放机场更名无锡苏州机场?官方回应:没改名
世界观焦点:大学生组团到工地吃13元盒饭 20种菜任选味道棒:老板回应物美价廉不怕竞争
迄今最好的长焦旗舰!OPPO Find X6系列来了
摊上事:联想被判向美国公司赔偿近10亿授权费 侵犯5G专利等
【天天新要闻】我国率先研发 全球6G技术大会即将召开:2030年商用
读Java性能权威指南(第2版)笔记19_垃圾回收F
【全球独家】聊聊缓存
环球动态:自动驾驶驶向何方
天天动态:高通胀正掏空美国人储蓄 近半民众陷入财务困境:鸡蛋都吃不起节奏
为了改桥接,我决定破解中兴F450G V2光猫
每日快报!贵州贵阳多地突降冰雹!现场视频画面:还伴随闪电
国内成品油零售价今晚即将下调:预计下跌0.05元/升!
世界新动态:体验完百度的文心一言 我只能说:它胆子够大!
天天热点评!好评率98%的民国武侠动作游戏:终于要上手游了!
天天观焦点:生产力起飞!微软正式推出Microsoft 365 Copilot:AI全面植入Office全家桶
据报道 特斯拉Model S的纽伯格林赛道比保时捷Taycan还快
NodeJS 实战系列:模块设计与文件分类
环球新动态:计算,存储,网络虚拟化区别
当前热门:加速颠覆燃油车!汉、唐冠军版上市:双车20.98万起
全球快看:从小吃到大的腌菜 竟是“垃圾堆”生产?被315暴击的进来
即时看!MyBatis
当前快看:群友们的表情包《九十期》
每日视点!男子镜头前嗨舞被羊顶翻 网友看完大笑:做人不能太狂浪
每日头条!自媒体捏造董明珠和王自如恋情!龚文祥公开致歉:希望取得原谅
今日快看!Win11最新正式版闯大祸:SSD性能不忍直视
新动态:设计一款可扩展和基于windows系统的一键处理表格小工具思路
天天即时看!微软签署第四份《使命召唤》十年协议:索尼仍不愿妥协
【天天聚看点】男孩长蛀牙爸爸用电钻钻牙止痛 被网友疯狂指责:太危险了
全球讯息:20.98万元起 2023款比亚迪唐DM-i上市:全系升级铝合金悬架
热点聚焦:冲击百万销量!比亚迪汉DM-i、DM-p补贴10000元现金
世界观速讯丨点积、内积、外积、叉积、张量积——概念区分
day05-Lombok、SpringInitializer
【世界聚看点】国家推出稳定2023年大豆生产一揽子支持政策
当前关注:双拖布+超大吸力!小米米家扫拖机器人3S发售:千元旗舰
世界视点!特斯拉一体化压铸工艺被质疑增加修车成本 一个小碰撞可能要修11万
精彩看点:追上Intel AMD锐龙7000处理器终于用上192GB内存:频率满血
环球看热讯:315全景观察:深情主播“连哄带骗” 爸妈的钱就没了
最新:无解了!微软将推出基于GPT-4的Office 365服务 实用性拉满
【焦点热闻】北京通州区汽车消费券活动时间是什么时候?