大量使用 **kwargs 来提高可读性是否被认为是好的做法?

Is it considered good practice to use **kwargs prolifically to aid readability?

在设计 类 时,我发现在 __init__ 方法中放置默认参数值很尴尬,例如:

class Class1(object):
    def __init__(self, y=2, z=3):
        self.y = self.manip_y(y)
        self.z = self.manip_z(z)

    def manip_y(self, y):
        return y * 10

    def manip_z(self, z):
        return z - 30

**kwargs 添加到函数签名以将默认值也放置在函数签名中是否被认为是更好的做法?:

class Class2(object):
    def __init__(self, **kwargs):
        self.y = self.manip_y(**kwargs)
        self.z = self.manip_z(**kwargs)

    def manip_y(self, y=2, **kwargs):
        return y * 10

    def manip_z(self, z=3, **kwargs):
        return z - 30

不要这样做。为什么?因为它迫使您不仅要阅读 __init__ 代码以了解如何创建对象,还要阅读 其中调用的所有函数

最好在 __init__ 签名中添加默认值——这样人们只需要查看签名即可找出选项。而且,在示例 2 中,默认值现在隐藏在其他函数中。此外,您的文档会更简单。