使用* args和** kwargs而不是显式列出预期参数

当我在一个有很多嵌套函数调用和对象层次结构的项目中工作时,我想知道什么是将所有必需的参数传递到最高层,再从那里逐步传递到较低层的最佳实践。


示例:3个类及其所需的(构造函数)参数:


A级:a,b


B类:c,d,e


C级:f


类A持有B的一个实例,而B持有C的一个实例。它们在各自父级的构造函数中初始化。因此,这意味着使用我的代码的人将只初始化A的新对象,并且必须将所有参数a,b,c,d,e,f传递给A,然后在该参数处对其进行处理或进一步分发。


示例代码:


class A(object):

    def __init__(self, a, b, c, d, e, f):

        b = B(c, d, e, f)


class B(object):

    def __init__(self, c, d, e, f):

        c = C(f)


class C(object):

    def __init__(self, f):

        pass

我的第一个尝试是直接在构造函数中列出类及其所有子级需要的所有参数,但这很容易出错,并且具有很高的代码冗余性,尤其是在每一层提供默认值时。所以我正在考虑使用** kwargs和* args代替。


这样的好处是,我可以将那些参数传递给孩子,并且每一层都可以从那里获取所需的参数。


但是,缺点是希望使用此层次结构的类的人无法使用IDE的自动完成功能来查看期望的参数。


在Python 3中,什么被认为是最佳实践?


蓝山帝景
浏览 139回答 2
2回答
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python