什么是单例模式?通俗点讲:单例模式就是在程序执行的过程中,类只有一个实例,这不是说单例模式只能去创建一个实例,而是你创建的所有实例 (也就是对象) 都指的是同一个实例。如何做到这一点呢?我们的__new__特殊方法就派上用场了,可能大家对这个方法熟悉又陌生,那么接下来通过一个小程序简单的过渡一下
class A():
def __new__(cls):
return “ 你好 ”
def __init__(self):
print(self)
print(A())
猜想一下,这里控制台会输出什么?
输出结果:你好
这里再创建 A 对象的时候就会先执行__new__方法,然后将返回值传递给__init__方法的 self,所以结果会是:你好,这这段程序中我们知道对象的创建是依靠__new__方法的,那么我们就可以通过这个方法入手,每次创建对象的时候在__new__方法内部进行判断,不拐弯抹角了,直接附上为小伙伴们准备的代码。
class A():
_instance = None
def __new__(cls):
if cls._instance is None:
cls._instance = super().__new__(cls)
return cls._instance
def __init__(self):
print(self)
A() #输出结果:<__main__.A object at 0x0000020CED433FD0>
A() #输出结果:<__main__.A object at 0x0000020CED433FD0>
可以清晰对比到两个对象地址是一样的,可见我们的目的就达到了,上面是通过一个私有变量_instance 控制实现的,当然小伙伴可以其他方式实现,如:开关 (定义一个 bool 变量进行控制) 等。
谢谢大家的支持!