我正在尝试使用 Python attrs 创建全局共享配置。我的目标是使用所有 attrs 函数和验证器,同时只初始化一次 attrs 类。
我正在尝试以下操作:
- 创建单例元类:
class Singleton(type):
_instances = {}
def __call__(cls, *args, **kwargs):
if cls not in cls._instances:
cls._instances[cls] = super(Singleton, cls).__call__(*args, **kwargs)
return cls._instances[cls]
- 创建配置模块
@attr.s
class A(object, metaclass=Singleton)
x = attr.ib()
- 从 main 初始化配置
cfg = A(x='my_global_configuration_value')
我希望在我的程序模块中将 cfg 作为全局导入和重用,如下所示:
cfg = <config_module>.A
print(cfg.x)
尽管有单例元类配置,但返回的 cfg 是 A 的新实例。有没有人对 attrs 做过类似的事情?