如何在初始化之前向类添加属性?

2024-06-01 09:39:35 发布

您现在位置:Python中文网/ 问答频道 /正文

问题

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

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

我的想法

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

我很肯定这违反了Python的禅宗。话虽如此,我很好奇人们怎么能做到这一点


Tags: 模块文件实例参数属性init配置文件方式
1条回答
网友
1楼 · 发布于 2024-06-01 09:39:35

您可以迭代**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

相关问题 更多 >