使用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
测试代码:
运行结果为: