- 目的–让类创建的对象,在系统中只有唯一的一个实例;
- 每一次执行类名
()
返回的对象,内存地址是相同的; - 构造私有化,保证在系统的使用中,只有一个实例。
__new__方法及重写
class MusicPlayer(object):
def __new__(cls, *args, **kwargs):
print("创建对象,分配空间")
instance = super().__new__(cls)
return instance
def __init__(self):
print("播放器初始化")
player = MusicPlayer()
print(player)
创建对象,分配空间
播放器初始化
<__main__.MusicPlayer object at 0x0000024AD64B9490>
如何让初始化动作只执行一次
class MusicPlayer(object):
instance = None
init_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.init_flag:
return
print("初始化播放器")
MusicPlayer.init_flag = True
player1 = MusicPlayer()
print(player1)
player2 = MusicPlayer()
print(player2)
初始化播放器
<__main__.MusicPlayer object at 0x000001BB32349490>
<__main__.MusicPlayer object at 0x000001BB32349490>