一、单例模式
1、常用的单例模块
classSingleton(object):_instance =Nonedef __new__(cls, *args, **kwargs):if not cls._instance:
cls._instance = super(Singleton, cls).__new__(cls)return cls._instances1=Singleton()
s2=Singleton()print(s1 is s2) #True
2、属性共用的单例
"""上面的第一种写法,虽然创建的是同一个实例,
但是属性是不共用的,因为每次__init__都会重新设置"""
classSingleton(object):
_instance=Nonedef __new__(cls, *args, **kwargs):if notcls._instance:
cls._instance= super(Singleton, cls).__new__(cls)returncls._instancedef __init__(self, name, age):
self.name=name
self.age=age
s1= Singleton(name="小明", age=18)print(s1.name, s1.age) #小明 18
s2= Singleton(name="小红", age=17)print(s2.name, s2.age) #小红 17
print(s1 is s2) #True
"""因此想要属性也共用,__init__也需要处理"""
classSingleton(object):
_instance=None
_initialized=Falsedef __new__(cls, *args, **kwargs):if notcls._instance:
cls._instance= super(Singleton, cls).__new__(cls)returncls._instancedef __init__(self, name, age):if notself._initialized:
self.name=name
self.age=age
self._initialized=True
s1= Singleton(name="小明", age=18)print(s1.name, s1.age) #小明 18
s2= Singleton(name="小红", age&