我正在围绕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和最简单的?如果您有引用,请加入引用。