博客
关于我
单例模式的python实现
阅读量:521 次
发布时间:2019-03-08

本文共 987 字,大约阅读时间需要 3 分钟。

 

1、使用装饰器

def singleton(cls): _instance = {} def _singleton(*args, **kwargs): if cls not in _instance: _instance[cls] = cls(*args, **kwargs) return _instance[cls] return _singleton@singletonclass A(object): def __init__(self, x): self.x = x assert id(A(1)) == id(A(2)) 2、类内实现,通过定义get_singleton函数+非线程安全
class Singleton(object): def __init__(self,*args,**kwargs): pass @classmethod def get_instance(cls, *args, **kwargs): if not hasattr(Singleton, '_instance'): Singleton._instance = Singleton(*args, **kwargs) return Singleton._instance
3、类内实现,通过定义__new__函数+线程安全
import threadingclass Singleton(object): _instance_lock = threading.Lock() def __init__(self, *args, **kwargs): pass def __new__(cls, *args, **kwargs): if not hasattr(cls, '_instance'): with Singleton._instance_lock: if not hasattr(cls, '_instance'): Singleton._instance = super().__new__(cls) return Singleton._instancedef task(arg): obj = Singleton()for i in range(10): t = threading.Thread(target=task, args=[i, ]) t.start()

转载地址:http://rryiz.baihongyu.com/

你可能感兴趣的文章
Windows上CLion的配置
查看>>
210所高校21届保研率曝光!这些211保研率堪比985!
查看>>
uniapp配置去掉友盟无法打包,提示配置错误如何解决
查看>>
网狐客户端-win32
查看>>
Ubuntu 20.10 QT 5.12.2 cannot find -lGL错误解决
查看>>
QT报make: Circular all <- first dependency dropped.错误解决。
查看>>
设计模式二十三之工厂模式--工厂方法模式
查看>>
设计模式二十三之工厂模式--建造者模式
查看>>
细聊商品
查看>>
串行通信原理及实验仿真
查看>>
豪威科技2021数字电路设计笔试
查看>>
复位策略
查看>>
[Telerik]RadDocking第05篇 在同一个RadSplitContainer中定义多个面板分组
查看>>
ERP项目成功的关键因素:团队建设
查看>>
[MEF]第02篇 MEF的导入导出契约
查看>>
用 shell 脚本制造连接频繁中断的场景
查看>>
Silverlight初始屏幕
查看>>
BackgroundWorker 组件
查看>>
LINQ之日期函数
查看>>
光脚丫学LINQ(016):[演练]创建简单对象模型和LINQ查询(C#)
查看>>