def singleton(cls, *args, **kwargs):
instances = {}
def inner(cls, *args, **kwargs):
if cls not in instances:
instances[cls] = cls(*args, **kwargs)
return instances[cls]
return inner @singleton
class Test1:
pass # 推荐使用这种 简单好用 线程安全
# ===========================================================
import threading class Singleton: def __init__(self, cls):
self.__cls = cls
self.__instance = None
self._lock = threading.Lock() def __call__(self, *args, **kwargs):
self._lock.acquire()
if self.__instance is None:
self.__instance = self.__cls(*args, **kwargs)
self._lock.release()
return self.__instance @Singleton
class Test2:
pass # 继承时的执行顺序 base new -> son new -> son init. new 相当于构造方法,init相当于实例后再初始化 先执行父类的new 就好比先是人再是学生
# ==============================================================
class SingleBase(object):
instance = None def __new__(cls, *args, **kwargs): # if not instance:
# instance = cls.__new__(*args, **kwargs):
# return instance
if cls.instance is None:
cls.instance = object.__new__(cls)
return cls.instance def __init__(self):
pass class Test3(SingleBase): def __init__(self, name):
self._name = name def get_name(self):
return self._name # meta 这个我还不是很懂
# =====================================================
class MetaSingleton(type):
_instances = {}
def __call__(cls, *args, **kwargs):
if cls not in cls._instances:
cls._instances[cls] = super().__call__(*args, **kwargs)
return cls._instances[cls] class Test4(metaclass=MetaSingleton): def __init__(self):
pass if __name__ == '__main__':
t1 = Test3('jwang')
t2 = Test3('hello')
print(id(t1))
print(id(t2))
print(t1.get_name())
print(t2.get_name()) test3 = Test4()
test4 = Test4()
print(id(test3) == id(test4))

最新文章

  1. Distributed2:Linked Server Login 添加和删除
  2. poj1664-放苹果(递归)
  3. 如何参与Linux内核开发(转)
  4. php-引号中出现$
  5. CentOS 中PHP开启 GD功能
  6. Oracle 10g AND Oracle 11g手工建库案例--Oracle 11g
  7. A very hard Aoshu problem(dfs或者数位)
  8. POJ-1182 食物链---并查集(附模板)
  9. win7系统IE浏览器主页被搜狗篡改问题的解决方法
  10. 077、跨主机使用Rex-Ray volume (2019-04-24 周三)
  11. 利用git 进行多人协作开发
  12. LINQ之路11:LINQ Operators之过滤(Filtering)
  13. angular2 pipe实现搜索结果中的搜索关键字高亮
  14. BZOJ.4817.[SDOI2017]树点涂色(LCT DFS序 线段树)
  15. 【socket-python应用】控制泓格ET-7044通信模块输入DI输出DO
  16. 四层协议给站点设置独享ip
  17. asp.net正则表达式
  18. python dict 和 json 互转
  19. 关于sencha touch 用phonegap打包后,docked悬停的组件被手机软键盘遮挡的解决方法
  20. Odoo8中“更多”下拉菜单选项指定后台执行代码

热门文章

  1. python里的深浅拷贝
  2. mac使用相关笔记
  3. error C2065: ‘_bstr_t’ : undeclared identifier
  4. Laex/Delphi-OpenCV
  5. Ajax二级联动简单实例
  6. PAT 2019-3 7-1 Sexy Primes
  7. Java享元模式(Flyweight Pattern)
  8. 刚安装的程序要卸载,如何Ubuntu查看程序安装记录
  9. Redis 系列(04-2)Redis原理 - 内存回收
  10. 一、python基础之字符串的处理