python中单例模式

python 复制代码
import threading





class Singleton(type):
    _instances = {}
    _instance_lock = threading.Lock()
    con = threading.Condition(_instance_lock)

    def __call__(cls, *args, **kwargs):
        key = '&&'.join([str(i) for i in args])
        if key not in cls._instances:
            if cls._instance_lock.locked():
                cls.con.wait()
            cls._instance_lock.acquire()
            cls._instances[key] = super(Singleton, cls).__call__(*args, **kwargs)
            cls._instance_lock.release()
            return cls._instances[key]
            
        else:
            return cls._instances[key]



class MyClass(metaclass=Singleton):
    
    def __init__(self,username):
        print(username)
        self.username = username
        
    def get_username(self):
        return self.username
    
a1 = MyClass("test")
print(a1.get_username())
a2 = MyClass("test")
print(a1.get_username())
    

debug可以发现,MyClass只实例化了一次

https://stackoverflow.com/questions/6760685/what-is-the-best-way-of-implementing-singleton-in-python

相关推荐
AI弟几秒前
推荐系统:带你走进推荐之路(二)
人工智能·python·深度学习·面试·推荐算法
拾忆,想起12 分钟前
Dubbo序列化异常终结指南:从精准诊断到根治与防御
开发语言·前端·微服务·架构·php·dubbo·safari
waves浪游15 分钟前
进程控制(中)
linux·运维·服务器·开发语言·c++
不错就是对17 分钟前
mmdetection - Linux环境搭建
图像处理·人工智能·python·深度学习·计算机视觉
0 0 017 分钟前
CCF-CSP 36-3 缓存模拟(cache)【C++】
开发语言·c++·算法
wjs202420 分钟前
C# 环境:深入解析与优化实践
开发语言
满天星830357726 分钟前
【Linux】信号(上)
linux·运维·服务器·开发语言·c++
霸王大陆27 分钟前
《零基础学 PHP:从入门到实战》模块十:从应用到精通——掌握PHP进阶技术与现代化开发实战-5
android·开发语言·php
背心2块钱包邮34 分钟前
第5节——定积分与面积
python·深度学习·机器学习·matplotlib
电饭叔35 分钟前
如何将提前的奇数进行相加
python