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

相关推荐
m5655bj5 分钟前
使用 Python 高效复制 Excel 行、列、单元格
开发语言·python·excel
龙言龙论17 分钟前
身份证信息批量处理系统:从入门到实战(附exe工具+核心源码)
数据库·python
Murphy_lx21 分钟前
C++ std_stringstream
开发语言·c++·算法
m0_6265352026 分钟前
代码分析 长音频分割为短音频
javascript·python·音视频
Mr.Winter`34 分钟前
基于Proto3和单例模式的系统参数配置模块设计(附C++案例实现)
c++·人工智能·单例模式·机器人
v***870435 分钟前
QoS质量配置
开发语言·智能路由器·php
Wpa.wk39 分钟前
自动化测试环境配置-java+python
java·开发语言·python·测试工具·自动化
带刺的坐椅1 小时前
AI 应用工作流:LangGraph 和 Solon AI Flow,我该选谁?
java·python·ai·solon·flow·langgraph
道一231 小时前
C#获取操作系统版本号方法
开发语言·c#
道一231 小时前
C# 判断文件是否存在的方法
开发语言·c#