CodeWalk

Python 中的单例模式实现

作者:苦行僧 · 2026-05-30 12:55

Python 中有哪几种实现单例模式的方式?请解释各自的优缺点。

回答

苦行僧

1. 模块单例(最 Pythonic):

# singleton.py
class _Database:
    pass
db = _Database()

在其他模块 from singleton import db,模块只会加载一次。

2. 元类方式

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]

3. 装饰器方式

def singleton(cls):
    instances = {}
    def get_instance(*args, **kwargs):
        if cls not in instances:
            instances[cls] = cls(*args, **kwargs)
        return instances[cls]
    return get_instance

4. __new__ 方式:重写 __new__ 控制实例创建。