游戏电视苹果数码历史美丽
投稿投诉
美丽时装
彩妆资讯
历史明星
乐活安卓
数码常识
驾车健康
苹果问答
网络发型
电视车载
室内电影
游戏科学
音乐整形

python如何实现单例模式

  单例模式
  单例模式(SingletonPattern)是一种常用的软件设计模式,该模式的主要目的是确保某一个类只有一个实例存在。当你希望在整个系统中,某个类只能出现一个实例时,单例对象就能派上用场。
  比如,某个服务器程序的配置信息存放在一个文件中,客户端通过一个AppConfig的类来读取配置文件的信息。如果在程序运行期间,有很多地方都需要使用配置文件的内容,也就是说,很多地方都需要创建AppConfig对象的实例,这就导致系统中存在多个AppConfig的实例对象,而这样会严重浪费内存资源,尤其是在配置文件内容很多的情况下。事实上,类似AppConfig这样的类,我们希望在程序运行期间只存在一个实例对象。
  在Python中,我们可以用多种方法来实现单例模式:1。使用模块
  其实,Python的模块就是天然的单例模式,因为模块在第一次导入时,会生成。pyc文件,当第二次导入时,就会直接加载。pyc文件,而不会再次执行模块代码。因此,我们只需把相关的函数和数据定义在一个模块中,就可以获得一个单例对象了。如果我们真的想要一个单例类,可以考虑这样做:mysingleton。pyclassMySingleton(object):deffoo(self):passmysingletonMySingleton()
  将上面的代码保存在文件mysingleton。py中,然后这样使用:frommysingletonimportmysingletonmysingleton。foo()2。使用newCreateyourtestshere。classSingleton:definit(self,name):self。namenamedefnew(cls,args,kw):ifnothasattr(cls,instance):origsuper(Singleton,cls)cls。instanceorig。new(cls)returncls。instanceoneSingleton(aa)twoSingleton(bb)print(one。name)print(one。name)two。a3print(one。a)one和two完全相同,可以用id(),,is检测print(id(one))print(id(two))print(onetwo)print(oneistwo)bbbb3140262441189328140262441189328TrueTrue
  加上锁importtimeimportthreadingclassSingleton(object):instancelockthreading。Lock()definit(self):time。sleep(1)print(self)defnew(cls,args,kwargs):withcls。instancelock:ifnothasattr(Singleton,instance):Singleton。instanceobject。new(cls)returnSingleton。instancedeftask():objSingleton()foriinrange(10):tthreading。Thread(targettask)t。start()3。利用类实现单例模式:
  不能支持多线程的单例模式classSingleton(object):classmethoddefinstance(cls,args,kwargs):ifnothasattr(Singleton,instance):Singleton。instanceSingleton()returnSingleton。instanceaSingleton。instance()bSingleton。instance()print(ab)True
  但是我们加上多线程试试importtimeclassSingleton(object):definit(self):time。sleep(1)classmethoddefinstance(cls,args,kwargs):ifnothasattr(Singleton,instance):Singleton。instanceSingleton()returnSingleton。instanceaSingleton。instance()bSingleton。instance()print(ab)importthreadingdeftask():objSingleton。instance()print(obj)foriinrange(10):tthreading。Thread(targettask)t。start()main。Singletonobjectat0x0000022E579C6E80main。Singletonobjectat0x0000022E579AB898main。Singletonobjectat0x0000022E579EC6A0main。Singletonobjectat0x0000022E579DB1D0main。Singletonobjectat0x0000022E579EC5C0main。Singletonobjectat0x0000022E579D1FD0main。Singletonobjectat0x0000022E579D9C50main。Singletonobjectat0x0000022E579C6F60main。Singletonobjectat0x0000022E579D1EB8main。Singletonobjectat0x0000022E579DB2B0
  解决上面存在的问题,实现支持多线程的单列模式:importtimeimportthreadingclassSingleton(object):instancelockthreading。Lock()definit(self):time。sleep(1)classmethoddefinstance(cls,args,kwargs):withcls。instancelock:ifnothasattr(Singleton,instance):Singleton。instanceSingleton()returnSingleton。instancedeftask():objSingleton。instance()print(obj)foriinrange(10):tthreading。Thread(targettask)t。start()main。Singletonobjectat0x7fd2ff82d990main。Singletonobjectat0x7fd2ff82d990main。Singletonobjectat0x7fd2ff82d990main。Singletonobjectat0x7fd2ff82d990main。Singletonobjectat0x7fd2ff82d990main。Singletonobjectat0x7fd2ff82d990main。Singletonobjectat0x7fd2ff82d990main。Singletonobjectat0x7fd2ff82d990main。Singletonobjectat0x7fd2ff82d990main。Singletonobjectat0x7fd2ff82d990
  创建实例只能调用Singleton。instance()来调用,不能用Singleton()来实现四、基于metaclass方式实现
  如果不清楚元类可以参考这一篇文章:python元类的介绍importthreadingclassSingleton(type):instancelockthreading。Lock()defcall(cls,args,kwargs):withcls。instancelock:ifnothasattr(cls,instance):cls。instancesuper(Singleton,cls)。call(args,kwargs)returncls。instanceclassFoo(metaclassSingleton):definit(self,name):self。namenameobj1Foo(name)obj2Foo(name)print(obj1,obj2)

头条所有的国家能看到吗?要找的人一直在国外生活,很少回国?只要这个国家或地区有网络,搜索头条就可以看到,无论是英文或华文版头条都有,语言已经不是读者阅读的大问题,看读者自己的喜好可以自由设置成英文或中文。比如下图我生活在新加坡,我的头……我为什么喜欢日本马兰士PM80功放听音乐,玩音响,离不开功放。在众多的功放中,梦里梦里寻他千百度,唯有马兰士PM80。平民百姓的我,受经济条件的限制,不敢也不能有太高的音响系统追求,玩不起高价的音响设配。……中国联通对美国联邦通信委员会撤销中国联通美洲公司214牌照做来源:新华网新华社北京2月3日电(记者高亢)中国联通3日发出声明回应中国联通(美洲)运营有限公司于美国当地时间2月2日收到美国联邦通信委员会(FCC)撤销214牌照的命令一事。……利用线粒体DLoop序列研究全世界山羊母系遗传多样性及系统发为从分子水平上进一步理解世界范围内山羊母系遗传多样性、基因流变迁、群体结构和群体扩张历史。西南大学动物科学技术学院俄广鑫教授团队利用已公布的4165个来自于全世界196个……1亿多用户参与!支付宝相互宝明日正式关停明天支付宝旗下的网络互助平台相互宝将正式关停。在上个月底,支付宝相互宝发布公告,相互宝将于明年1月28日关停,用户无需再参与分摊。相互宝表示,自2018年底相互宝上……4个交易日持续下跌,虚拟货币为何又暴跌4个交易日累计下跌超23虚拟货币为何又暴跌本报记者李华林比特币又又又跌了。近日,比特币迎来瀑布式暴跌,1月21日至1月24日间,由4。3万美元左右一路下挫到3……您应该在2021年购买的7件旅行用品1。索尼A7C无反相机索尼a7C无反光镜相机您可以为旅行游戏做的最好的事情之一就是将您当前的相机升级到最新最好的。您现在可以买到的最紧凑但最先进的相机之一是索尼A7……OasisNetwork上第一个DEX的TVL在24小时内达YuzuSwap是第一家在OasisNetwork上运营的去中心化交易所,自1月11日推出以来,该交易所快速得到了使用,突显出对去中心化金融协议的需求上升。据该交易所周三……适老APP更要重实效2021年1月起,我国在全国范围内开展了为期一年的互联网应用适老化改造行动,金融、出行、购物等多个领域都推出了适老版APP,取得了阶段性成效。然而,适老APP是否真正走进了老年……腾讯放弃音乐版权独家授权权利,网易云音乐可能夺回周杰伦腾讯在今日晚间发布了《关于放弃音乐版权独家授权权利的声明》,正式向相关上游版权方发送《音乐版权授权合作协议解除通知函》及《音乐版权授权合作协议解除催告函》,最大限度寻求与相关上……ColorOS系统再进一步!腾讯QQ不挂后台也能接收消息自从有了微信,QQ用得就比较少了,但是相信很多人拿到新手机或者是电脑之后,还是会第一时间下载QQ吧。确实,对于80和90后来说,QQ包含了青春的回忆,QQ里有自己多年不再联系的……联通正式宣布实体SIM卡即将消失,eSIM卡让多款通讯设备更在今天(3月29日),中国联通就在北京宣布了eSIM独立号码业务已经正式启动,这次是一个历史性的一刻,在我们用手机以来,手机SIM卡的形态就一直随着现在的手机卡槽改变,由原来的……
iPhone12十条新特性汇总,第一条就很厉害,更小或者没有Hello大家好,我是兼容机之家的小牛!这才年初,距离苹果9月份的苹果发布会还有一段时间,虽然如此,但是最近关于iPhone12的消息不绝于耳。这里有张关于iPhone1……RedmiK40升级MIUI12。5,体验并不完美K40升级MIUI12。5需要申请开发版内测,目前已经放包,我也是第一时间选择升级,下面聊聊体验感受!首先是MIUI12。5的手势动画升级,配合K40这块120Hz刷新率……哪吒归来!AustrianAudioHiX50评测几年前去漫步者做客,张老板讲了他们收购STAX前的一些故事,据说当时谈判的时候,俩日本老爷子可硬气可倔强,这也不许那也不行,你敢有半分违背人家原则就能立马撂挑子不谈了,宁愿牌子……白话NBA太阳砍乔治成功3比1胜快船,关键时刻保罗依然稳文大白大家好,我是大白。欢迎来到我的白话NBA。今天说一下快船和太阳G4的比赛,最终太阳通过奇怪的罚点球方式,拿下了比赛的胜利,然后乔治在最后关头成了那个被砍的对象……4700S让主机和PC有了首次的直接性能对比自从Xbox开启采用x86指令集处理器后,游戏机和PC在过去十多年里已经从IBMCell、MIPS等不同的指令集全面向PC靠拢(除了任天堂采用ARM外),除了指令集都一样外,两……月活超34亿,Unity推出游戏服务平台以减化跨平台多人游戏编译VR陀螺近日,Unity作为一个让创作者能够为手机、平板电脑、PC、游戏机以及ARVR设备开发2D和3D内容的平台,推出新平台UnityGamingServices(……全球芯片严重缺货,这次居然轮到路由器了在较早之前,我们曾经报道过个别群体中非常受追捧的软路由R2S从去年175元上涨到了如今的360元,当时我认为这也许只是个别案例,毕竟绝大多数人对路由器的性能需求和更新频率都不会……为什么国产手机越来越贵了?曾几何时,智能手机还是苹果、三星等国外科技巨头的天下时,国产手机品牌还在起步阶段,都不敢把价格卖到5000以上。而现在,像华为、小米、oppo、vivo等国产手机的价格早已突破……那些手机上已经消失的东西,你最怀念哪个?自从智能手机称霸互联网后,手机早已不再是一个只用来接打电话接收短信的通讯工具,在现在来看,它更像是一把钥匙,不管你进哪,都不能少了它的存在。而智能手机发展了这么多年,可不……超越轻薄的强悍华硕灵耀14商务笔记本电脑上手CiaoBello,我是老房。自从工作以来,我就逐步转变了在选择笔记本电脑时的观念。当然,这主要也是因为使用场景的变化造成的需求改变。上学时期,要兼顾宿舍和学校两处的使用……简单易上手,美味好营养,蒸烤箱美食菜谱分享CiaoBella,我是老房。蒸和烤,是两种最基础的烹饪方式,也是最简单的。不像炒、煎、炸、炖等,需要对火候有一定的把控,还有颠勺等基本功得学习。蒸、烤,在完成原材料准备……SAP收购的一家云软件供应商要上市了估值120亿美元Qualtrics这家云软件供应商周一向美国证交会(SEC)提交了文件,准备作为一家独立公司继续运营。两年前这家公司就准备IPO,但SAP在上市前夕收购了这家云软件供应商。Qu……
友情链接:易事利快生活快传网聚热点七猫云快好知快百科中准网快好找文好找中准网快软网