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("呵呵")
-
- 并发