解决方法:
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>