设为首页 收藏本站
查看: 594|回复: 0

小猿圈学习python之实现单例模式的两种方法

[复制链接]
累计签到:3 天
连续签到:3 天
发表于 2019-6-19 18:30:13 | 显示全部楼层 |阅读模式
小猿圈alex讲了实现单例模式的好几种方法,小编把最经典,也是最经常用的两种实现单例模式的方法呈现给大家,如果想学其他的单例,可以去小猿圈看一下alex的课程,学习一下。



单例顾名思义就是这个类只能创建一个实例,那怎么创建呢?
1、__new__实现单例:
  class Foo(object):
  def __init__(self,name):
    self.name=name
  def __new__(cls,*args,**kwargs):
    if not hasattr(cls,instance): #对象不存在instance属性
      cls.instance=super().__new__(cls,*args,**kwargs)
    return cls.instance #创建了一个实例,还没初始化对象
f=Foo('hello')
f1=Foo('hi')
f.name=hello f1.name=hi
id(f)==id(f1)
地址没变 属性变了
2、使用装饰器实现的单例:
    class Demo(cls,*ags,**kwargs):
  instance={}
  def foo(*args,**kwargs):
    if cls not in instance:
      instance[cls]=cls(*args,**kwargs)#具体的实例(已经初始化好的实例对象)
    return instance[cls]
    return foo
@Demo
class School(object):
  def __init__(self,name)
  self.name=name
s=School('hafo')
s1=School('qinghua')
s.name=hafo s1.name=hafo s1==s
地址没变,属性也没变
朋友们看出两者实现单例的异同点了吗?虽然两者都可以实现单例,但是__new__实现的单例,虽然只能实现一个实例但是属性改变了,装饰器实现的单例,可以保证id和属性都保持一个,如果朋友们对其他的单例之间不同感兴趣Python交流群:242719133,可以去小猿圈看一下alex讲的单例实现的内容。


运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-911722-1-1.html 上篇帖子: 小猿圈之嵌入式软件工程师面试题(内含答案) 下篇帖子: 小猿圈Linux学习之Tomcat安装与优化详解
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表