使用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
复制代码

 

测试代码:

 

 运行结果为:

 

posted @   Tinero  阅读(30)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 【杭电多校比赛记录】2025“钉耙编程”中国大学生算法设计春季联赛(1)
点击右上角即可分享
微信分享提示