python中单例模式

打印 上一主题 下一主题

主题 1002|帖子 1002|积分 3006

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

x
  1. import threading
  2. class Singleton(type):
  3.     _instances = {}
  4.     _instance_lock = threading.Lock()
  5.     con = threading.Condition(_instance_lock)
  6.     def __call__(cls, *args, **kwargs):
  7.         key = '&&'.join([str(i) for i in args])
  8.         if key not in cls._instances:
  9.             if cls._instance_lock.locked():
  10.                 cls.con.wait()
  11.             cls._instance_lock.acquire()
  12.             cls._instances[key] = super(Singleton, cls).__call__(*args, **kwargs)
  13.             cls._instance_lock.release()
  14.             return cls._instances[key]
  15.             
  16.         else:
  17.             return cls._instances[key]
  18. class MyClass(metaclass=Singleton):
  19.    
  20.     def __init__(self,username):
  21.         print(username)
  22.         self.username = username
  23.         
  24.     def get_username(self):
  25.         return self.username
  26.    
  27. a1 = MyClass("test")
  28. print(a1.get_username())
  29. a2 = MyClass("test")
  30. print(a1.get_username())
  31.    
复制代码
debug可以发现,MyClass只实例化了一次
https://stackoverflow.com/questions/6760685/what-is-the-best-way-of-implementing-singleton-in-python

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

惊落一身雪

论坛元老
这个人很懒什么都没写!
快速回复 返回顶部 返回列表