Python之单例模式

要将单例的话,先讲__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__方法,不然会死循环

猜你喜欢

转载自blog.csdn.net/MR__L1u/article/details/81783367
今日推荐