Python: 将 init args 干净地解压到成员变量中
Python: unpack init args into member variables cleanly
考虑下面的示例 class:
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——也就是说,我只想解压已定义的成员变量a
、b
、c
和 d
。
我之前看过这个,并得出结论,没有很好的方法来自动化样板文件。
幸运的是,您通常不需要它:
- 如果
__init__
中传递了 17 个成员变量,是时候进行重构了。
- 如果您的 class 只是一个名称空间/数据包,请不要首先使用 class。
如果您想尝试使用库来删除重复项,请查看 python-fields
, or the slightly less magical attrs
。
考虑下面的示例 class:
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——也就是说,我只想解压已定义的成员变量a
、b
、c
和 d
。
我之前看过这个,并得出结论,没有很好的方法来自动化样板文件。
幸运的是,您通常不需要它:
- 如果
__init__
中传递了 17 个成员变量,是时候进行重构了。 - 如果您的 class 只是一个名称空间/数据包,请不要首先使用 class。
如果您想尝试使用库来删除重复项,请查看 python-fields
, or the slightly less magical attrs
。