当前位置: 首页 > news >正文

海南省网站建设_网站建设公司_改版升级_seo优化

有什么做服装的网站,宁波网络营销咨询,百度指数数据分析报告,linux上安装wordpress点评#xff1a;单例模式是指让一个类只能创建出唯一的实例#xff0c;这个题目在面试中出现的频率极高#xff0c;因为它考察的不仅仅是单例模式#xff0c;更是对Python语言到底掌握到何种程度#xff0c;建议大家用装饰器和元类这两种方式来实现单例模式#xff0c;因…点评单例模式是指让一个类只能创建出唯一的实例这个题目在面试中出现的频率极高因为它考察的不仅仅是单例模式更是对Python语言到底掌握到何种程度建议大家用装饰器和元类这两种方式来实现单例模式因为这两种方式的通用性最强而且也可以顺便展示自己对装饰器和元类中两个关键知识点的理解。 方法一 使用装饰器实现单例模式。 from functools import wraps def singleton(cls): 单例类装饰器 instances {} wraps(cls) def wrapper(*args, **kwargs): if cls not in instances: instances[cls] cls(*args, **kwargs) return instances[cls] return wrapper singleton class President: pass 扩展装饰器是Python中非常有特色的语法用一个函数去装饰另一个函数或类为其添加额外的能力。通常通过装饰来实现的功能都属横切关注功能也就是跟正常的业务逻辑没有必然联系可以动态添加或移除的功能。装饰器可以为代码提供缓存、代理、上下文环境等服务它是对设计模式中代理模式的践行。在写装饰器的时候带装饰功能的函数上面代码中的wrapper函数通常都会用functools模块中的wraps再加以装饰这个装饰器最重要的作用是给被装饰的类或函数动态添加一个__wrapped__属性这个属性会将被装饰之前的类或函数保留下来这样在我们不需要装饰功能的时候可以通过它来取消装饰器例如可以使用President President.__wrapped__来取消对President类做的单例处理。需要提醒大家的是上面的单例并不是线程安全的如果要做到线程安 全需要对创建对象的代码进行加锁的处理。在Python中可以使用threading模块的RLock对象来提供锁可以使用锁对象的acquire和release方法来实现加锁和解锁的操作。当然更为简便的做法是使用锁对象的with上下文语法来进行隐式的加锁和解锁操作。 方法二 使用元类实现单例模式。 class SingletonMeta(type): 自定义单例元类 def __init__(cls, *args, **kwargs): cls.__instance None super().__init__(*args, **kwargs) def __call__(cls, *args, **kwargs): if cls.__instance is None: cls.__instance super().__call__(*args, **kwargs) return cls.__instance class President(metaclassSingletonMeta): pass 扩展Python是面向对象的编程语言在面向对象的世界中一切皆为对象。对象是通过类来创建的而类本身也是对象类这样的对象是通过元类来创建的。我们在定义类时如果没有给一个类指定父类那么默认的父类是object如果没有给一个类指定元类那么默认的元类是type。通过自定义的元类我们可以改变一个类默认的行为就如同上面的代码中我们通过元类的__call__魔术方法改变了President类的构造器那样。 补充关于单例模式在面试中还有可能被问到它的应用场景。通常一个对象的状态是被其他对象共享的就可以将其设计为单例例如项目中使用的数据库连接池对象和配置对象通常都是单例这样才能保证所有地方获取到的数据库连接和配置信息是完全一致的而且由于对象只有唯一的实例因此从根本上避免了重复创建对象造成的时间和空间上的开销也避免了对资源的多重占用。 再举个例子项目中的日志操作通常也会使用单例模式这是因为共享的日志文件一直处于打开状态只能有一个实例去操作它否则在写入日志的时候会产生混乱。 这个我还没完全弄懂我懂了之后再来补充内容解释
http://www.ihoyoo.com/news/123791.html

相关文章:

  • 定制做网站浦东网站备案流程
  • 昆明微网站制作常用网页设计软件
  • 做网站云主机建站出海
  • 时间轴网站设计网站后台是怎么做出来的
  • 南京市住宅建设总公司网站一个公司的官网模板
  • 食品电子商务网站建设规划书设计优化怎么收费
  • 南宁网站建设免费推广新郑网站建设公司
  • p2p借贷网站开发 论文wordpress不显示网站标题
  • 微博网站建设湛江找人做网站排名
  • 网站开发开源框架手机电脑同步网站开发
  • 高端网站建设品牌连云港网站建设培训学校
  • 外贸网站 语言简单的工作室网站模板
  • 发卡网站怎么做专业做二手房装修网站
  • 高校国际交流中心网站建设方案网站建设 地址: 上海石门二路
  • 网络推广专员岗位要求seo推广营销公司
  • 网站建设企业官网体验版是什么永州网站建设企业
  • 网站设计的目的和功能网站运营与建设作业
  • 山东德铭工程建设公司网站谷歌优化培训
  • 自贡住房和城乡建设厅网站西安找建网站公司
  • 建站平台转型做网站中山
  • 网站集约化后如何建设wordpress淘宝客自动采集
  • 响应式网站下载做系统去哪个网站
  • 制作外贸网站成本大学社团网站建设
  • 佛山提供网站设计报价株洲网红餐厅
  • 做网站判多少年网页制作的内容
  • 重庆网站建设招聘ftp怎么做网站
  • 求职网站网页模板下载360免费建站系统
  • 企业设计个网站如何制作自己的网站链接视频
  • 学网站建设怎么样wordpress首页分类调用
  • 浙江建设网官方网站网站主机和服务器