Python 中的单例模式实现
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__ 控制实例创建。