倒数第四行代码,调用后,会调用__init__函数,但是这不是单例模式的初衷(所有self数据又被重新初始化),有什么办法能防止该步骤的初始化?(像C++那样,单例模式仅在第一次调用构造函数)
class Single(object):
_instance = None
def __new__(cls, *args, **kw):
if cls._instance is None:
cls._instance = object.__new__(cls, *args, **kw)
return cls._instance
def __init__(self):
self.var = 0
print("init")
def setVar(self, var):
self.var = var
def getVar(self):
return self.var
if __name__ == '__main__':
single1 = Single() # log: init
single1.setVar(1)
print(single1.getVar()) #log: 1
single2 = Single() # log: init
print(single1.getVar()) # log: 0
print(single2.getVar()) # log: 0
print(id(single1) == id(single2)) # log: Ture