博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
python实现单例模式
阅读量:6069 次
发布时间:2019-06-20

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

#装饰器实现单例模式def singleton1(func):    instance={}    def inner(*args,**kwargs):        if func not in instance:           instance[func]=func(*args,**kwargs)        return instance[func]    return inner@singleton1class user():    passfoo1=user()foo2=user()print(foo1 is foo2)
#使用修改基类实现单例模式class Singleton2():    def __new__(cls, *args, **kwargs):        if not hasattr(cls, '_instance'):            cls._instance = super().__new__(cls, *args, **kwargs)        return cls._instanceclass Foo(Singleton2):    passfoo3 = Foo()foo4 = Foo()print( foo3 is foo4)
#使用类实现单例模式,配合多线程import threadingimport timeclass Singleton(object):    _lock=threading.Lock()    def __init__(self):        time.sleep(1)    @classmethod    def instance(cls, *args, **kwargs):        if not hasattr(Singleton, "_instance"):            with Singleton._lock:                if not hasattr(Singleton, "_instance"):                    Singleton._instance = Singleton(*args, **kwargs)        return Singleton._instancedef task(arg):    obj = Singleton.instance()    print(obj)for i in range(10):    t = threading.Thread(target=task,args=[i,])    t.start()time.sleep(20)obj=Singleton.instance()print(obj)
#使用元类实现单例模式class SingletonType(type):    _instance_lock = threading.Lock()    def __call__(cls, *args, **kwargs):        if not hasattr(cls, "_instance"):            with SingletonType._instance_lock:                if not hasattr(cls, "_instance"):                    cls._instance = super(SingletonType,cls).__call__(*args, **kwargs)        return cls._instanceclass Foo(metaclass=SingletonType):    def __init__(self,name):        self.name = nameobj1 = Foo('name')obj2 = Foo('name')print(obj1 is obj2)

 

转载于:https://www.cnblogs.com/lalalaxixixi/p/10467872.html

你可能感兴趣的文章
Java 集合深入理解(7):ArrayList
查看>>
qsort函数应用大全
查看>>
(2)Spring框架详解(Spring基础配置和开发步骤)
查看>>
Anyhashable打印格式化
查看>>
打理一下IOS项目中的图片资源
查看>>
Why C++ ? 王者归来(转载)
查看>>
Makefile
查看>>
如何做好子域名优化三大重点
查看>>
python argparse用法总结
查看>>
你必须知道的.net学习总结之继承
查看>>
Hadoop 系列YARN:资源调度平台(YARN的命令)
查看>>
java 短连接+MD5加密短链接
查看>>
基于mvc的javascript web富应用开发
查看>>
C#之接口定义与实现
查看>>
js取整数、取余数的方法
查看>>
ERROR 1062 (23000): Duplicate entry '1-1' for key 'PRIMARY'
查看>>
文件编码转换
查看>>
ORACLE NOLOGGING研究
查看>>
python中的break\return\pass\continue用法
查看>>
小白的个人技能树(基于自动化软件测试开发)
查看>>