python实现单例模式有四种方式:1.__new__方法(推荐,支持继承和懒加载但线程不安全);2.装饰器(灵活复用但可能影响元信息);3.模块级变量(最简单、线程安全但无懒加载);4.元类(高度可控但复杂难维护)。

Python中实现单例模式有多种方式,核心目标是确保一个类只有一个实例,并提供全局访问点。不同写法在可读性、线程安全、兼容性(如继承、装饰器)、以及是否支持懒加载等方面各有差异。
1. 使用 __new__ 方法重写(推荐基础写法)
这是最经典、最符合 Python 习惯的实现,控制实例创建过程,天然支持继承和懒加载。
- 在 __new__ 中检查类属性是否已存在实例,若无则调用父类 __new__ 创建;否则直接返回已有实例
- 线程不安全,如需并发安全,需配合 threading.Lock
- 支持带参数的初始化(__init__ 仍会被多次调用,需额外判断避免重复初始化)
2. 使用装饰器封装(灵活复用)
将单例逻辑从类定义中解耦,适合为多个类统一添加单例行为。
- 装饰器内部维护一个字典,以类为 key 缓存实例
- 简洁易用,但可能干扰类的元信息(如 isinstance、继承链一般不受影响)
- 默认不保证线程安全,需在装饰器内加锁
- 无法直接控制实例化时机(本质仍是懒加载,首次调用时创建)
3. 使用模块级变量(最简单 & 隐式单例)
Python 模块本身是单例——模块只被导入一次,其顶层变量天然全局唯一。
响应式黑色展台设计整站模板,自带内核安装即用,图片文本实现可视化,方便修改,支持多种内容模型及自定义功能,可根据需要自行添加。模板特点: 1、安装即用,自带人人站CMS内核及企业站展示功能(产品,新闻,案例展示等),并可根据需要增加表单 搜索等功能(自带模板) 2、支持响应式 3、前端banner轮播图文本均已进行可视化配置 4、伪静态页面生成 5、支持内容模型、多语言、自定义表单、筛选、多条件搜
立即学习“Python免费学习笔记(深入)”;
- 无需任何特殊语法或技巧,直接定义类实例即可,例如:instance = MyClass()
- 无延迟加载(模块导入即初始化),不支持按需创建
- 无法通过类名动态获取实例(需显式导入该变量),对测试和替换不够友好
- 线程安全,且性能开销最小
4. 使用元类(高度可控但复杂)
通过自定义元类,在类创建阶段注入单例逻辑,适合框架级封装。
- 所有继承该元类的类自动获得单例行为,侵入性强但一致性高
- 可统一处理 __init__ 调用、参数校验、销毁逻辑等
- 调试和理解成本较高,容易与其它元类冲突
- 线程安全性仍需手动保障
选择哪种方式,取决于具体场景:日常开发推荐 __new__ 写法或模块级变量;需要批量增强多个类时用装饰器;框架开发且需强约束时再考虑元类。不复杂但容易忽略细节。









