python 一款超简单的单例模式

20 阅读1分钟

单例模式:确保一个类只有一个实例存在

使用场景:数据库的链接,日志记录器,音乐播放器等

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