使用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 @ 2023-03-10 12:08  Tinero  阅读(29)  评论(0编辑  收藏  举报