Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/289.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 大量使用**KWARG以提高可读性是否被视为良好做法?_Python_Class_Pep8 - Fatal编程技术网

Python 大量使用**KWARG以提高可读性是否被视为良好做法?

Python 大量使用**KWARG以提高可读性是否被视为良好做法?,python,class,pep8,Python,Class,Pep8,在设计类时,我发现在\uuuuu init\uuuuu方法中放置默认参数值很尴尬,如: 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):

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

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

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

最好在
\uuuu init\uuuuu
签名中添加默认值——这样一来,用户只需查看签名即可确定选项。在示例2中,默认值现在隐藏在其他函数中。此外,您的文档将更简单。

您对第一个示例有何看法?您试图实现的目标还不清楚-例如
manip_y
为什么会成为公共实例方法?它会从外部调用吗?“大量使用kwargs”如何帮助可读性?虽然并非总是如此,但kwargs所示的示例更难理解。我真的不知道您的第二个示例如何提高可读性。您仍然必须使用您声称不方便使用的
y=2
z=3
默认值(但在不同的位置),但现在您的
**kwargs
也无处不在。如果有任何损可读性的地方,kwargs根本不帮助可读性