在使用 类名() 创建对象时,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
测试代码:
运行结果为:
标签:__,instance,Python,模式,对象,引用,单例,new,cls From: https://www.cnblogs.com/wangjiong/p/17202953.html