【Python】Python实现单例模式有哪几种方式?

在Python中,实现单例模式的主要方式有:

  1. 使用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
  1. 装饰器
## 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
  1. 元类
## 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 适用于类本身控制。各有优劣,但都可以实现单例模式。