class Musicplayer:
#记录第一个被创建对象的引用
instance=None
#记录是否执行过初始化动作
init_flag=False
def __new__(cls, *args, **kwargs):
# 1.判断类属性是否为空对象
if cls.instance is None:
# 2.调用父类方法,为第一个对象分配内存空间
cls.instance=super().__new__(cls)
# 3.返回对象的引用
return cls.instance
def __init__(self):
#1.判断是否执行初始化动作
if Musicplayer.init_flag:
return
# 2.如果没有执行过,执行初始化动作
print("播放器初始化完成")
# 3.修改类属性标记
Musicplayer.init_flag=True
#初始化对象
player1=Musicplayer()
print(player1)
player2=Musicplayer()
print(player2)
输出结果:播放器只初始化一次,两个对象的地址相同
播放器初始化完成
<__main__.Musicplayer object at 0x013A1870>
<__main__.Musicplayer object at 0x013A1870>