问题
我有一个Python模块,该模块在运行时创建许多其他模块的实例。其他模块是通过外部配置文件指定的,该文件还包含每个模块__init__
的所有参数/值。
我想向所有新实例添加相同的属性,但是我不想在所有类上都向__init__
添加新的arg。我该怎么办?
我的想法
一个可能的解决方案:在运行中,我可以通过某种方式操纵模块上的__init__
属性来向__init__
添加一个新的arg。然后,我可以将要在所有实例上添加的属性传递给它。
我很确定这违反了Python的Zen。话虽这么说,我很好奇一个人该怎么做?
答案 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