为了帮助提高可读性,使用** kwargs是否被视为良好做法?

时间:2015-03-11 16:28:40

标签: python class pep8

在设计类时,我发现在__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

2 个答案:

答案 0 :(得分:2)

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

答案 1 :(得分:1)

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