# 第一种方法使用模块级变量,python模块在运行期间只会被导入一次,所以可以使用将需要实现单例的类定义到一个模块中然后在需要使用的地方导入即可
# 第二种方法使用装饰器,可以使用装饰器来包装类,使得每次实例化时都返回同一个实例
def singleton(cls):
instances = {}
def wrapper(*args, **kwargs):
if cls not in instances:
instances[cls] = cls(*args, **kwargs)
return instances[cls]
return instances[cls]
# 第三种方法 使用元类来创建类
class SingletonMaeat(type):
_intances = {}
def __call__(cls,*args, **kwargs):
if cls not in instances:
cls._instances[cls] = super().__call__(*args, **kwargs)
return cls._instances[cls]
return cls._instances[cls]
# 第四种方法 使用__new__方法
class Singleton:
def __new__(cls,*args,**kwargs):
if not hasattr(cls,"_instance"):
cls._instance =super(Singleton,cls).__new__(cls)
return cls._instance

380

被折叠的 条评论
为什么被折叠?



