new
python中的单例
案例
class MusicPlayer(object):
# 定义类属性记录单例对象引用
instance = None
def __new__(cls, *args, **kwargs):
# 1. 判断类属性是否已经被赋值
if cls.instance is None:
cls.instance = super().__new__(cls)
# 2. 返回类属性的单例引用
return cls.instance
只执行一次初始化工作
案例
class MusicPlayer:
#实现单例模式
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
#实现只执行一次init出事话方法
print('这是__init__方法')
#修改类属性标记
MusicPlayer.init_flag = True
ob1 = MusicPlayer()
print(ob1)
ob2 = MusicPlayer()
print(ob2)