当前位置: 首页 > news >正文

Python实现单例模式

使用函数装饰器

def singleton(cls):_instance = {}def inner():if cls not in _instance:_instance[cls] = cls()return _instance[cls]return inner@singleton
class Demo(object):def __init__(self):passdef test():b1 = Demo()b2 = Demo()print(b1, b2)

使用类装饰器

class single1:def __init__(self, cls):self.cls = clsself.cls.instance = Nonedef __call__(self, *args, **kwargs):if not self.cls.instance:self.cls.instance = self.cls(*args, **kwargs)return self.cls.instance@single1
class Demo:def test(self):print("hello world")def test():b1 = Demo()b2 = Demo()print(b1, b2)

基于__new__ 方法实现

import threadingclass Demo(object):_instance_lock = threading.Lock()def __init__(self):passdef __new__(cls, *args, **kwargs):if not hasattr(Demo, "_instance"):with Demo._instance_lock:if not hasattr(Demo, "_instance"):Demo._instance = object.__new__(cls)  return Demo._instancedef test():b1 = Demo()b2 = Demo()print(b1, b2)

打印结果显示b1和b2的地址一致:

<demo.Demo object at 0x1103ca980> <demo.Demo object at 0x1103ca980>

http://www.lryc.cn/news/178583.html

相关文章:

  • spark相关网站
  • ThreeJS-3D教学四-光源
  • Linux 回收内存到底怎么计算anon/file回收比例,只是swappiness这么简单?
  • 软件测试中的测试工具和自动化测试
  • 个人博客系统测试报告
  • 高效搜索,提升编程效率
  • Java编程技巧:文件上传、下载、预览
  • 【蓝桥杯选拔赛真题63】Scratch云朵降雨 少儿编程scratch图形化编程 蓝桥杯选拔赛真题解析
  • 【新版】系统架构设计师 - 软件架构的演化与维护
  • 安卓循环遍历计时器
  • Docker-基本了解
  • Leetcode383. 赎金信
  • overleaf杂谈-Springer文献格式问题
  • No148.精选前端面试题,享受每天的挑战和学习
  • BASH shell脚本篇4——函数
  • VisualStudio配置OpenCV环境
  • C++手写NMS
  • 第9讲:VUE中监听器WATCH使用详解
  • 微信小程序开发基础(一)认识小程序
  • LeetCode 1049. 最后一块石头的重量 II
  • Golang中的类型转换介绍
  • 本人碰到的RN项目的坑
  • EcmaScript标准-导入与导出-js
  • 如何将matlab中的mat矩阵文件在python中读取出来
  • 解释C语言中 6.18f (浮点数常量后缀)
  • Pandas 2.1中的新改进和新功能
  • c#static(静态)关键字
  • GitHub配置SSH key
  • 文件审计及文件完整性监控
  • 华为智能企业远程办公安全解决方案(1)