Python面向对象之单例模式(2)

解决方法:
1.定义一个flag标识是否执行过初始化动作,初始值为Flase
 2.在init方法中,判断flag,如果为Flase就执行初始化动作
3.然后将flag设置为True
 4.这样,再次自动调用init方法时,初始化动作就不会被再次执行了。

改进版单例模式示范
class MusicPlayer(object):
    # 记录第一个 被创建对象的引用
    instance = None
    # 记录是否执行过初始化动作
    flag = False

def __new__(cls, *args, **kwargs):
        if cls.instance is None:
            cls.instance = super().__new__(cls)

return cls.instance

def __init__(self):
        # 判断是否执行过初始化动作
        # 执行过,就直接返回,不再执行后续动作
        if MusicPlayer.flag:
            return
        # 没执行过,说明是第一次初始化,就完成初始化动作,并且修改类属性标识
        print("播放器初始化")
        MusicPlayer.flag = True


player1 = MusicPlayer()
print(player1)

player2 = MusicPlayer()
print(player2)

# 播放器初始化
# <__main__.MusicPlayer object at 0x000001ACFC4F9358>
# <__main__.MusicPlayer object at 0x000001ACFC4F9358>

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/02430cf40e92a84df4a05104d681ee09.html