使用Python实现单例模式
在使用 类名() 创建对象时,python解释器首先会调用 __new__() 方法为对象分配内存,然后再调用 __init__() 方法进行初始化:
其中 __new__() 是object基类提供的内置静态方法,主要的作用是在内存中为对象分配空间,然后返回对象引用;
python解释器获得对象引用后,将引用作为第一个参数,传递给__init__方法;
而重写 __new__() 方法的代码非常固定:
一定要有 return super().__new__(cls) 语句,否则python解释器得不到分配了空间的对象的引用,就不会调用对象的初始化方法
因为 __new__() 是一个静态方法,从而在调用时,需要主动传递 cls 参数
从而,实现单例模式的代码应该如下:
1 class Sun():
2
3 #用于存储第一个被创建的引用
4 instance = None
5
6 def __new__(cls, *args, **kwargs):
7
8 #判断类属性是否是空对象
9 if cls.instance is None:
10 #调用父类方法,为第一个对象分配存储空间
11 cls.instance = super().__new__(cls)
12
13 #返回类属性保存的对象引用
14 return cls.instance
测试代码:
运行结果为:
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 【杭电多校比赛记录】2025“钉耙编程”中国大学生算法设计春季联赛(1)