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

相关推荐
BoBoZz1920 分钟前
AlignTwoPolyDatas 基于ICP算法的配准和相机视角切换
python·vtk·图形渲染·图形处理
dllmayday22 分钟前
Qt/QML + C++ 双向数据绑定(MVVM 模式的几种常用方法(ChatGPT)
开发语言·c++·qt
han_hanker31 分钟前
统一拦截异常 @RestControllerAdvice
java·开发语言·数据库
嗝o゚32 分钟前
Flutter与开源鸿蒙:一场“应用定义权”的静默战争,与开发者的“范式跃迁”机会
python·flutter
liu****33 分钟前
一.脚手架介绍以及部分工具使用
开发语言·数据结构·c++·手脚架开发
一只会奔跑的小橙子35 分钟前
pytest安装对应的库的方法
python
资深web全栈开发41 分钟前
深入理解 Google Wire:Go 语言的编译时依赖注入框架
开发语言·后端·golang
ohoy1 小时前
EasyPoi 数据脱敏
开发语言·python·excel
Hello World呀1 小时前
Java实现手机号和身份证号脱敏工具类
java·开发语言
BoBoZz191 小时前
MarchingCubes 网格数据体素化并提取等值面
python·vtk·图形渲染·图形处理