首页 / PYTHON / python 中单例模式
python 中单例模式
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了python 中单例模式,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1903字,纯文字阅读大概需要3分钟。
内容图文
![python 中单例模式](/upload/InfoBanner/zyjiaocheng/1055/44a4d6bc748c49f4b7c0aa4eef355018.jpg)
1、什么是单例模式:
单例模式是指一个类有且只有一个实例对象,创建一个实例对象后,再创建实例是返回上一次的对象引用。(简单的讲就是两个实例对象的ID相同,节省了内存空间)
2、单例模式的创建:
举例创建一个类,比如宇宙只有一个地球,帮助理解单例模式
class Earth: pass a=Earth() print(a) b=Earth() print(b) *****结果****** 32096552 32096496 我们可以看出两个实例内存ID不相同,该类不是一个单例模式
那么怎么能够让类只创建一个实例,而后再创建的实例是返回上一次的对象的引用呢?
我们了解到,python中,一个类创建对象实例是通过调用父类object的 __new__(cls)方法来创建对象的
我们可以通过重写 __new__(cls)方法去实现类只创建一个实例:
class Earth(object): __instance=None def__new__(cls): if cls.__instance==None:#如果__instance为空证明第一次创建实例 cls.__instance=object.__new__(cls) return cls.__instanceelse: #如果不是第一次创建实例,返回上一次的对象引用return cls.__instance a=Earth() print(id(a)) b=Earth() print(b) ******结果***** 1730389200 1730389200
上面例子我们通过__new__方法创建了一个单例模式类,但是该单例类再使用多线程是会存在一定问题。我们需要加入互斥锁的方式解决该问题。
import threading class Earth(object): _instance_lock=threading.Lock() def__init__(self): passdef__new__(cls,*args,**kwargs): ifnot hasattr(Earth,‘_instance‘): with Earth._instance_lock: ifnot hasattr(Earth,‘_instance‘): Earth._instance=object.__new__(cls) return Earth._instance a=Earth() b=Earth() print(a,b) def task(arg): obj=Earth() print(obj) for i in range(10): t=threading.Thread(target=task,args=[i,]) t.start() *****结果***** <__main__.Singleton object at 0x00000000029D06A0> <__main__.Singleton object at 0x00000000029D06A0> <__main__.Singleton object at 0x00000000029D06A0> <__main__.Singleton object at 0x00000000029D06A0> <__main__.Singleton object at 0x00000000029D06A0> <__main__.Singleton object at 0x00000000029D06A0> <__main__.Singleton object at 0x00000000029D06A0> <__main__.Singleton object at 0x00000000029D06A0> <__main__.Singleton object at 0x00000000029D06A0> <__main__.Singleton object at 0x00000000029D06A0>
3、创建单例的其他方法:1、使用模块、2使用装饰器 3、使用类的方式4、基于metaclass方式
具体参考博客:https://www.cnblogs.com/huchong/p/8244279.html
原文:https://www.cnblogs.com/dushangguzhousuoli/p/11027994.html
内容总结
以上是互联网集市为您收集整理的python 中单例模式全部内容,希望文章能够帮你解决python 中单例模式所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。