单例模式:确保一个类只有一个实例存在
使用场景:数据库的链接,日志记录器,音乐播放器等
class MusicPlayer:
# 定义一个类属性 flag1 = 记录new的,要对new进行重写
flag1 = None
# 定义一个类属性 flag2 = 记录 init ,要对init 进行重写
flag2 = False
# 重写类的new方法
def __new__(cls, *args, **kwargs):
if cls.flag1 is None:
cls.flag1 = super().__new__(cls) # 调用的是object 中的new方法
return cls.flag1
def __init__(self):
if MusicPlayer.flag2:
return
print('init音乐播放器~~~~')
# 改变flag2为True
MusicPlayer.flag2 = True
if __name__ == '__main__':
# 常见实例对象
player1 = MusicPlayer()
player2 = MusicPlayer()
print(player1)
print(player2)
print(id(player1) == id(player2)) # True