单例模式:
众多设计模式中的一种:让整个程序中这个类有且仅有一个实例
好处:
- 如果该类是控制整个程序的类(相当于司令),则这个类的对象只能有一个
- 如果该类的属性较多,内容庞大,并且数据可以进行共享,则创建这个类对象长久使用,不再回收,让这个类的对象保持仅有一个
- 节约计算机在创建或者收回对象时的消耗
- 该对象会一直占用这个空间,相当于使用空间来换取时间
操作方法
1、在这个类中创建一个类变量来存储这个类的实例
# 创建一个类变量存储这个类的实例
instance = None
2、重写new函数,设置这个变量为空时才生成新对象,如果不为空则使用之前的对象
def __new__(cls, *args, **kwargs):
if cls.instance is None: # 如果这个对象是空的
cls.instance = super().__new__(cls) # 则使用父类的函数创建一个对象
return cls.instance # 将这个对象返回
3、测试运行
class MusicPlayer:
# 创建一个类变量存储这个类的实例
instance = None
def __new__(cls, *args, **kwargs):
print("创建对象的函数")
if cls.instance is None: # 如果这个对象是空的
print("调用父类的函数创建对象".center(100, "-"))
cls.instance = super().__new__(cls) # 则使用父类的函数创建一个对象
return cls.instance # 将这个对象返回
def __init__(self):
print("创建这个对象时会自动调用的函数,用于初始化对象")
def play(self):
print("进行播放")
if __name__ == '__main__':
player1 = MusicPlayer()
print("该对象的信息为:", player1)
# 第二次创建对象
player2 = MusicPlayer()
print("该对象的信息为:", player2)