单例模式是保证一个类仅有一个实例的设计模式。Windows中的任务管理器就是一个典型的单例模式软件。Windows任务管理器如图所示。
Windows任务管理器只能打开一个,即使用户重复打开,也只能获得一个实例,这不同于Word等软件可以打开多个实例。这是因为如果有2个窗口同时都能结束进程,那么在窗口A中结束了某进程,而在窗口B中该进程还保留着;反之,在窗口B中结束了某进程,而在窗口A中该进程还保留着。这样就会造成冲突,导致系统崩溃。
定义单例类的语法格式如下:
class 类名(object):
def __new__(cls, *args, **kwargs):
if not hasattr(cls, '_instance'):
# 第一种方式
cls._instance = object.__new__(cls)
# 第二种方式
# cls._instance = super(类名, cls).__new__(cls)
return cls._instance
创建的单例类继承了object类。类中定义了一个魔法方法__new__(),__new__()方法是创建实例时调用的方法,因此,常说的创建一个实例,其实就是使用这个方法创建的。在__new__()方法中,第一个参数为cls,说明这是一个类方法,后面两个参数分别为*args和**kwargs。用这个方法来创建唯一实例。__new_