如何在Python中为具有许多属性的类编写初始值设定项?
我正在围绕一个不可更改的RESTAPI构建一个SDK(即,我不能更改模式)。API中的一些模型大约有20个属性,都带有公共getter和setter 其中1或2个属性不可为null,因此它们需要是如何在Python中为具有许多属性的类编写初始值设定项?,python,sdk,Python,Sdk,我正在围绕一个不可更改的RESTAPI构建一个SDK(即,我不能更改模式)。API中的一些模型大约有20个属性,都带有公共getter和setter 其中1或2个属性不可为null,因此它们需要是\uuuuu init\uuuu方法中的位置参数。其他属性是可选的,因此它们可以是关键字参数。然而,一个带有19个关键字参数的\uuuu init\uuuu方法似乎很笨拙。例如: def __init__(self, req_prop, opt_prop1=None, opt_prop2=None, .
\uuuuu init\uuuu
方法中的位置参数。其他属性是可选的,因此它们可以是关键字参数。然而,一个带有19个关键字参数的\uuuu init\uuuu
方法似乎很笨拙。例如:
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)
这使得\uuuu init\uuuu
方法更具可读性,但要求开发人员打开文件,检查要作为关键字参数传递的属性名称。此外,IDE也不能帮助拼写
使SDK代码更简洁、开发人员代码更详细的最后一个选项是强制使用属性设置器:
def __init__(self, req_prop):
self._req_prop = req_prop
对于第三方开发人员来说,哪种实现最具python风格且最简单?如果你有引文,请附上引文