单利模式的两种实现方式:
class Singleton(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 not Singleton.init_flag:
print("生成对象后先调用===init===")
Singleton.init_flag = True
s1 = Singleton()
print(id(s1))
s2 = Singleton()
print(id(s2))
结果:
生成对象后先调用===init===
1933634897288
1933634897288
class Singleton(object):
instance = None
def __new__(cls):
if cls.instance is None:
cls.instance = super().__new__(cls)
print("1:__new__")
else:
print("2:__new__")
return cls.instance
def __init__(self):
print("__init__")
ob1 = Singleton()
ob2 = Singleton()
print(id(ob1))
print(id(ob2))
结果:
1:__new__
__init__
2:__new__ # 第一次生成对象以后,再次调用时,就会走else后面的分支,因为已经生成对象了,
__init__ # 对象只生成一次,但是每次都得初始化,因此每个对象进来后都得调用__init__方法
2284560708664
2284560708664