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

相关推荐
杨超越luckly3 分钟前
HTML应用指南:利用POST请求获取全国极氪门店位置信息
python·arcgis·html·数据可视化·门店数据
青春不败 177-3266-05204 分钟前
最新AI-Python机器学习与深度学习实践技术应用
人工智能·python·深度学习·机器学习·卷积神经网络·语义分割·自编码
三维鱼4 分钟前
Python组合数据类型----5.2列表( 5.2.4 )
python
零日失眠者5 分钟前
【系统监控系列】005:CPU温度监控脚本
后端·python
故事不长丨7 分钟前
解锁C#编程秘籍:封装、继承、多态深度剖析
开发语言·数据库·c#
远瞻。7 分钟前
【环境配置】快速转移conda上的python环境
开发语言·python·conda
上班职业摸鱼人9 分钟前
Python迭代器与生成器深度解析:吃透yield关键字,写出高效内存代码
python
缘三水12 分钟前
【C语言】5.printf和scanf(新手向详细版)
c语言·开发语言·基础语法
无敌最俊朗@12 分钟前
Qt处理tcp数据 粘包 拆包 的简单方法
开发语言
棒棒的皮皮13 分钟前
【OpenCV】Python图像处理之图像加法运算
图像处理·python·opencv·计算机视觉