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

python--单例

1. 使用模块(最简单、最 Pythonic)

Python 的模块在第一次导入时会被加载并执行,之后再次导入会直接使用缓存,因此模块天然就是单例。

singleton.py

class MyClass: def __init__(self): self.value = 0 # 直接创建模块级全局实例 my_singleton = MyClass()

在其他文件中使用时:

from singleton import my_singleton my_singleton.value = 42

但是这种情况无法避免使用对象类型创建对象。

2. 使用__new__方法

__new__中控制实例的创建。

class MyClass: _instance = None def __new__(cls, *args, **kwargs): if cls._instance is None: cls._instance = super().__new__(cls) return cls._instance def __init__(self): # 注意:__init__ 每次调用都会执行,即使返回同一个实例 pass a = MyClass() b = MyClass() print(a is b) # True

优点:简单直接。
缺点__init__每次都会被执行,可能导致重复初始化;需要额外处理。

可以改进:使用一个标志位防止重复初始化。

class MyClass: _instance = None _initialized = False def __new__(cls, *args, **kwargs): if cls._instance is None: cls._instance = super().__new__(cls) return cls._instance def __init__(self): if not self._initialized: self._initialized = True self.value = 0 def addValue(self, value): self.value += value def display(self): print(self.value) a = MyClass() b = MyClass() if a is b: print("a and b are the same instance") else: print("a and b are different instances") a.addValue(10) b.display()

http://www.jsqmd.com/news/505355/

相关文章:

  • 解锁游戏修改新境界:Wemod-Patcher如何让你免费体验专业级功能
  • CentOS 7.6实战:安全升级glibc至2.31的完整指南与避坑要点
  • MiniMax-M2.7 实测
  • 电器出口俄罗斯合规破局!诚信标签解决方案,打通通关最后一公里!
  • 数字电子技术之逻辑门电路:从基础到应用的全面解析
  • 跨境电商亚马逊 ISTA 6-AMAZON.COM(SIOC)标准测试
  • 无需翻墙,即可调用 gpt-5.4 ,纵享丝滑
  • 图像融合新思路:高频低频分开处理真的有效吗?CDDFuse技术解析
  • Git误操作急救手册(新手必看,避坑指南)
  • 百度网盘直链解析终极指南:如何轻松突破下载限速
  • 突破小红书反爬壁垒:xhs工具如何实现数据采集效率提升300%
  • ELK(Elasticsearch+Logstash+Kibana) 从零搭建实战记录:多源日志采集与智能告警
  • Android开发者必看:用JSch实现SSH连接时如何避免NetworkOnMainThreadException
  • 多目标粒子群算法在33节点系统储能选址定容中的应用代码功能说明
  • AI Agent 开发全流程:从框架选型到企业级部署实战
  • Scarab:模组管理的智能解决方案指南
  • XFlow进阶实战:圆柱绕流问题的精细仿真与优化
  • 拒绝AIGC标红!2026保姆级降重教程:5款免费降AI神器+3招硬核手改技巧,稳过查重
  • ThinkPad散热系统的性能解锁:TPFanCtrl2双风扇智能调节技术深度剖析
  • 兆易创新GD32实战:FreeRTOS与CMSIS OS2的无缝对接与优化
  • 如何轻松提取Wallpaper Engine资源:RePKG完整使用指南
  • 别再花钱当韭菜,2026保姆级降AI教程:强推5款免费工具+3个手改绝招(建议收藏)
  • 避坑指南:fnOS的Docker容器跑iptv-sources镜像常见问题排查(端口冲突/镜像拉取失败)
  • DCT-Net人像卡通化快速部署与使用:Flask服务全解析
  • 彻底告别流氓软件!手把手教你用任务管理器+注册表清理布丁压缩(附防蓝屏技巧)
  • ROS2 DDS通信避坑指南:从‘robot_types.idl’看IDL结构体设计的3个最佳实践
  • 文件清理大师1.8一款满足特殊指定需求的文件清理工具
  • 26 nnu gis复试
  • SO逆向实战:Unidbg模拟执行中的JNI上下文补全与初始化函数追踪
  • 网工毕业设计最全选题大全