如何为Python中具有许多属性的类编写初始值设定项?

时间:2016-03-31 18:42:41

标签: python sdk

我正在围绕REST API构建一个不可更改的SDK(即我无法更改架构)。 API中的一些模型具有大约20个属性,所有属性都具有公共getter和setter。

这些属性中的1个或2个是不可为空的,因此它们需要是__init__方法中的位置参数。其他属性是可选的,因此它们可以是关键字参数。但是,带有19个关键字参数的__init__方法似乎很笨拙。例如:

def __init__(self, req_prop, opt_prop1=None, opt_prop2=None, ...):
    self._req_prop = req_prop
    self._opt_prop1 = opt_prop1
    self._opt_prop2 = opt_prop2
    ...

我认为对于使用带有方法提示的IDE的开发人员来说,上述实现会更容易。或者,我可以使用** kwargs:

def __init__(self, req_prop, **kwargs):
    self._req_prop = req_prop
    self._opt_prop1 = None
    self._opt_prop2 = None
    ...
    for key, value in **kwargs.items():
        setattr(self, key, value)

这使__init__方法更具可读性,但要求开发人员打开文件以检查要作为关键字参数传递的属性名称。此外,IDE无法帮助拼写。

使SDK代码更简洁,开发人员代码更详细的最后一个选项是强制使用属性设置器:

def __init__(self, req_prop):
    self._req_prop = req_prop

对于第三方开发人员来说哪个实现是最Pythonic和最简单的?如果您有引用,请加入引用。

0 个答案:

没有答案