#单例 方法
class MusicPlayer(object):
    
    instance=None
    
    # def __new__(cla,*args,**kwargs):
        
    #     if cla.instance is None:
    #         cla.instance=super().__new__(cla)
        
    #     return cla.instance
    
    
    def __init__(self):
        print("初始化播放器")



a=MusicPlayer()
b=MusicPlayer()

print(a)
print(b)
print(id(a)==id(b))
  • 优化了 发现了一些有意思的地方
#单例 方法2
class MusicPlayer(object):
    
    instance=None
    init_flag=False
    
    #这里,刚才的版本写错了,把cls写成cla了,也可以,只要前后一致就行,习惯是cls
    def __new__(cls,*args,**kwargs):
        
        if cls.instance is None:
            cls.instance=super().__new__(cls)
        
        return cls.instance
    
    
    def __init__(self):
        # 下面cls不行,因为cls此时不是参数,所以需要用类名调用类属性
        # if cls.init_flag is False:
        #     print("初始化播放器")
        #     cls.init_flag=True


        if MusicPlayer.init_flag is False:
            print("初始化播放器")
            MusicPlayer.init_flag=True
        



a=MusicPlayer()
b=MusicPlayer()

print(a)
print(b)
print(id(a)==id(b))
                
#***********************************