Python:干净地将init args解压缩为成员变量

时间:2017-03-15 02:34:24

标签: python setattr

考虑下面的示例类:

class Foo(object):
    def __init__(self, a=2, b=0, c=1, d=42):
        self.a = a
        self.b = b
        self.c = c
        self.d = d

有没有一种干净的方法将kwargs解压缩成成员变量?也许这个例子很简单,但想象一个构造函数有17个成员变量的长名称,如redundant_data_structure_that_we_should_probably_remove。我知道setattr(),例如在this other question,但我不想接受构造函数中的** kwargs - 也就是说,我只想解压缩已定义的成员变量abcd

1 个答案:

答案 0 :(得分:3)

我之前看过这个,并得出结论,那里没有很好的方法来自动化样板。

幸运的是,您通常不需要它:

  • 如果您在__init__中传递了17个成员变量,那么现在是重构的时间。
  • 如果您的课程只是一个名称空间/数据包,请不要首先使用课程。

如果您想尝试使用库来删除重复项,请查看python-fields或稍微不那么神奇的attrs