要将单例的话,先讲__new__
方法
__new__
方法应用在__init__
方法之前,我们知道在Python中,__init__
方法时用来初始化实例对象的,而现在,我们需要知道的是__new__
方法是属于object类的方法,它的作用就是创建类对象。
现在我们知道了__new__
方法,下面再看单例模式。
单例模式:让某个类创建出来的对象始终只有一个,让某个类创建出来的所有对象引用同一个内存地址。
1、一个对象中的数据或方法被很多个对象共用时,可以使用单例模式,这个对象的类叫做单例类;
2、让创建对象及初始化的代码只执行一次,后面只是返回之前已经创建好的对象
3、定义一个类属性用来记录创建出来的实例对象,定义一个类属性用来判断对象是否已经初始化
4、单例对象,只能创建出一个对象,只能初始化一次
现在知道了单例,我们再结合__new__
方法看看创建实例对象的时候底层都做了些什么?
主要做了3件事:
1、调用__new__
方法(object类)来创建对象,然后找了一个变量来接收__new__
的返回值,这个返回值表示创建出来的对象的引用;
2、__init__
(刚刚创建出来的对象的引用,即self)
3、返回对象的引用
class Dog(object):
__instance = None #定义类属性
def __new__(cls):
if cls.__instance = None: # 判断是否第一次初始化类对象
cls.__instance = object.__new__(cls) # 调用被重写的object类的`__new__`方法将第一次初始化的类对象赋值给类属性
return cls.__instance
else:
return cls.__instance # 后面返回的都是同一个对象的引用
注意:要修改类属性的值,必须用类对象,当前类重写了__new__
方法,在创建对象时,只能用object去调用__new__
方法,不然会死循环