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

相关推荐
23471021274 分钟前
4.15 学习笔记
开发语言·软件测试·python
qq_3721542321 分钟前
SQL嵌套查询中常见报错排查_语法与权限处理
jvm·数据库·python
java1234_小锋30 分钟前
Java高频面试题:什么是可重入锁?
java·开发语言
2401_887724501 小时前
CSS如何设置文字溢出显示省略号_利用text-overflowellipsis
jvm·数据库·python
m0_747854521 小时前
golang如何实现应用启动耗时分析_golang应用启动耗时分析实现思路
jvm·数据库·python
雾岛听蓝1 小时前
Qt操作指南:窗口组成与菜单栏
开发语言·经验分享·笔记·qt
解救女汉子1 小时前
如何截断SQL小数位数_使用TRUNCATE函数控制精度
jvm·数据库·python
zopple2 小时前
Laravel vs ThinkPHP:PHP框架终极对决
开发语言·php·laravel
2301_803875612 小时前
如何用 objectStore.get 根据主键 ID 获取数据库单条数据
jvm·数据库·python
松☆2 小时前
C++ 算法竞赛题解:P13569 [CCPC 2024 重庆站] osu!mania —— 浮点数精度陷阱与 `eps` 的深度解析
开发语言·c++·算法