在Python中,实现单例模式的主要方式有:
- 使用new方法
## python www.itzhimei.com 代码
class Singleton:
_instance = None
def __new__(cls):
if cls._instance is None:
cls._instance = super().__new__(cls)
return cls._instance
- 装饰器
## python www.itzhimei.com 代码
def singleton(cls):
instances = {}
def wrapper(*args, **kwargs):
if cls not in instances:
instances[cls] = cls(*args, **kwargs)
return instances[cls]
return wrapper
@singleton
class Foo:
pass
- 元类
## python www.itzhimei.com 代码
class SingletonMeta(type):
_instances = {}
def __call__(cls, *args, **kwargs):
if cls not in cls._instances:
cls._instances[cls] = super().__call__(*args, **kwargs)
return cls._instances[cls]
class Singleton(metaclass=SingletonMeta):
pass
主要都是利用 new、装饰器和元类在创建类实例时添加限制,返回同一实例。
区别在于装饰器为函数式,元类为类式,new 适用于类本身控制。各有优劣,但都可以实现单例模式。