当前位置: 首页 > 后端技术 > Python

Python3实现单例设计模式

时间:2023-03-25 23:27:57 Python

单例模式的一般实现饿汉式懒汉式就是通过一个方法来实现单例。我用的不多,这里就写一个饿汉风格。后面会补上懒人风格。单例模式的核心作用是保证一个类只有一个该类型的对象。为避免一个对象被过多调用时过多的内存消耗,可以使用单例模式。在python中创建一个新的对象会调用__new__方法为创建的对象分配其内存空间,并返回对象的引用,然后传递给__init__函数进行实例化。一般情况下不需要调用new方法,但是在使用单例时这一步是必须的。重写new方法时,需要返回当前实例的类cls:returnsuper().__new__(cls)。得到分配的内存空间引用后,开始实例化对象。代码可以简单写成如下:cobj=ClassObj()运行结果如下:但是上面的代码并没有实现单例模式。这时候我们就需要对上面的代码进行修改。使用new方法时判断是否已经实例化:classClassObj(object):instance=Nonedef__new__(cls):ifcls.instanceisNone:cls.instance=super().__new__(cls)print("ProceedAllocatememory")else:print("Allocated")returncls.instancedef__init__(self):print("Allocated")cobj=ClassObj()cobj1=ClassObj()上面代码在ClassObj中,定义了一个成员变量instance,用于存储分配的空间引用,最后在__new__方法中返回instance;如果是第一次创建该类型的对象,如果instance为None则实例化,如果不是None则提示Alreadyallocated,空间不会再次分配,会创建。运行结果如下:以上结果只是在第一次创建对象时分配了空间,之后创建对象时并没有创建新的空间。这时候也可以直接输出类对象查看空间:cobj=ClassObj()cobj1=ClassObj()print(cobj)print(cobj1)结果相同,如下: