如何在__init__之前添加属性到class?

How to add attribute to class before __init__?

问题

我有一个 Python 模块,它在运行时创建许多其他模块的实例。其他模块是通过外部配置文件指定的,该文件还包含每个模块的 __init__.

的所有 arguments/values

我想向所有新实例添加相同的属性,但我不想向我所有 类 的 __init__ 添加新参数。我该怎么做?

我的想法

一个可能的解决方案:在运行中,我可以通过某种方式操纵模块上的 __init__ 属性来向 __init__ 添加一个新的 arg。然后我可以将我想在所有实例上添加的属性传递给它。

我很确定这违反了 Python 的禅宗。话虽这么说,我很好奇怎么能做到这一点?

您可以遍历 **kwargs __init__ 参数并使用 __setattr__ 自动设置任何新传递的参数。 示例:

class Foo:
    def __init__(self, **kwargs):
        for key in kwargs:
            self.__setattr__(key, kwargs[key])

您只需盲目地将这两行加上 **kwargs 参数添加到您的 类,然后:

f = Foo(name="bar")
print(f.name)

输出:

bar