1.单例模式
- 作用: 保证某一类只有一个实例存在
2.实现单例模式的方式
-
模块导入
*文件1.py class Test: def __init__(self,name): self.name = name obj = Test("何必") 文件2.py from 文件1.py import obj # 仅有一个实例对象
-
类装饰器
*def singleton_model(func): obj = None def wrapper(*args,**kwargs): nonlocal obj if not obj: obj = func(*args,**kwargs) return obj return wrapper @singleton_model # Test = singleton_model(Test) class Test: def __init__(self,name): self.name = name obj = Test("何必") obj2 = Test("呵呵") #得到的对象内存地址跟obj一致
-
类绑定方法
*class Test: obj = None def __init__(self,name): self.name = name @classmethod def get_obj(cls,*args,**kwargs): # 在类方法内部处理 if not cls.obj: cls.obj = cls(*args,**kwargs) return cls.obj obj = Test.get_obj("何必")
-
__new__方法
*class Test: obj = None def __init__(self,name): self.name = name def __new__(cls,*args,**kwargs): if not cls.obj: cls.obj = super().__new__(cls) return cls.obj obj = Test("何必") obj2 = Test("呵呵")
-
元类
*class MyType(type): obj = None def __call__(self,*args,**kwargs): if not self.obj: self.obj = self.__new__(self) self.__init__(self.obj,*args,**kwargs) return self.obj class Test(metaclass=MyType): def __init__(self,name): self.name = name obj = Test("何必") obj2 = Test("呵呵")
-
并发