基础DAY10-单例
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
class MusicPlayer(object): # * 元组 ** 字典 def __new__(cls, *args, **kwargs): # 使用类名创建对象,new方法会被自动调用 print("创建对象,分配空间") # 2 为对象分配空间 instrance = super().__new__(cls) # 3 返回对象的引用 return instrance def __init__(self): print("播放器初始化") # 创建播放器对象 player = MusicPlayer() print(player)
class MusicPlayer(object): # 定义一个类属性,初始值是None,用于记录单例对象的引用 instance = None # * 元组 ** 字典 def __new__(cls, *args, **kwargs): # 使用类名创建对象,new方法会被自动调用 if cls.instance is None: cls.instance = super().__new__(cls) return cls.instance def __init__(self): print("播放器初始化") # 创建播放器对象 player = MusicPlayer() print(player) player2 = MusicPlayer() print(player2)
播放器初始化
<__main__.MusicPlayer object at 0x00000000012F4780>
播放器初始化
<__main__.MusicPlayer object at 0x00000000012F4780>
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
class MusicPlayer(object): # 定义一个类属性,初始值是None,用于记录单例对象的引用 instance = None init_flag = False # * 元组 ** 字典 def __new__(cls, *args, **kwargs): # 使用类名创建对象,new方法会被自动调用 if cls.instance is None: cls.instance = super().__new__(cls) return cls.instance def __init__(self): # 1 判断是否执行过初始化动作 if MusicPlayer.init_flag == False: # 2 如果没有执行过,在执行初始化动作 print("播放器初始化") # 3 修改类属性的标记 MusicPlayer.init_flag = True return # 创建播放器对象 player = MusicPlayer() print(player) player2 = MusicPlayer() print(player2)
播放器初始化
<__main__.MusicPlayer object at 0x0000000000814748>
<__main__.MusicPlayer object at 0x0000000000814748>