第一种使用类方法来实现
class Singleton:
instance = None
@classmethod
def getSingleton(cls):
if cls.instance==None:
cls.instance=cls()
return cls.instance
p1=Singleton.getSingleton()
p2=Singleton.getSingleton()
print(p1 is p2) # True
使用装饰器实现
def outer(fn):
instance = None
def inner(*args,**kwargs):
nonlocal instance
if instance==None
instance=fn(*args,**kwargs)
return instance
return inner
@outer
class Singleton:
pass
p1=Singleton()
p2=Singleton()
print(p1 is p2)# True
使用class内置的__new__方法实现
class Singleton:
instance = None
@classmethod
def __new__(cls,*args,**kwargs):
if cls.instance==None:
cls.instance=super(Singleton,cls).__new__(*args,**kwargs)
return instance
p1=Singleton()
p2=Singleton()
print(p1 is p2)# True