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

相关推荐
愚者游世6 小时前
template学习大纲
开发语言·c++·程序人生·面试·visual studio
阿里嘎多学长6 小时前
2026-03-11 GitHub 热点项目精选
开发语言·程序员·github·代码托管
宵时待雨6 小时前
C++笔记归纳10:继承
开发语言·数据结构·c++·笔记·算法
csbysj20206 小时前
TypeScript String
开发语言
小温冲冲6 小时前
QML vs Qt Widgets:深度对比与选型实战指南
开发语言·c++·qt
smchaopiao6 小时前
C++20概念(Concepts)入门指南
开发语言·c++·算法
挠头猴子7 小时前
c++中常用的运算符优先级
java·开发语言·c++
深蓝电商API7 小时前
多线程 vs 异步 vs 多进程爬虫性能对比
爬虫·python
我是唐青枫7 小时前
C#.NET Memory 深入解析:跨异步边界的内存视图与高性能实战
开发语言·c#·.net
Yupureki7 小时前
《C++实战项目-高并发内存池》5.PageCache构造
c语言·开发语言·c++·单例模式·github