0

我正在尝试使用 Python attrs 创建全局共享配置。我的目标是使用所有 attrs 函数和验证器,同时只初始化一次 attrs 类。

我正在尝试以下操作:

  1. 创建单例元类:
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]
  1. 创建配置模块
@attr.s
class A(object, metaclass=Singleton)
    x = attr.ib()
  1. 从 main 初始化配置
cfg =  A(x='my_global_configuration_value')

我希望在我的程序模块中将 cfg 作为全局导入和重用,如下所示:

cfg = <config_module>.A
print(cfg.x)

尽管有单例元类配置,但返回的 cfg 是 A 的新实例。有没有人对 attrs 做过类似的事情?

4

0 回答 0