如何在__init__之前向类添加属性?

时间:2019-05-17 20:44:42

标签: python attributes initialization

问题

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

我想向所有新实例添加相同的属性,但是我不想在所有类上都向__init__添加新的arg。我该怎么办?

我的想法

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

我很确定这违反了Python的Zen。话虽这么说,我很好奇一个人该怎么做?

1 个答案:

答案 0 :(得分:1)

您可以遍历**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