Python如何扩展自定义模型列表

时间:2019-01-31 10:35:56

标签: python python-3.x list

我是python的新手,并且来自Java背景。

我正在开发一个sdk,该sdk在内部调用一些剩余端点,并且我们公开了客户端和方法。我已经用Java完成了sdk。现在我在python中做同样的事情。我不手动编写代码。我使用swagger-code-gen。所以我在模型结构上没有太多灵活性。对于扩展其他模型列表的模型,生成的代码具有编译错误。因此,我正在尝试解决这些特殊情况。

在Java中,我们有代码:

public class Errors extends ArrayList<ErrorsInner> {
 //---
}

在python中,我想重新生成相同的代码。我尝试了以下选项。但似乎没有任何正常工作。 :

  1. 类错误(列表):

    这不是适当的解决方案,因为错误也应正确包含ErrorsInner的参数。因此,在反序列化之后,我可以在此模型中找到属性。

  2. 通过输入导入列表

    类错误(列表[ErrorsInner]):

我应该创建“错误”模型,以使其易于反序列化和序列化。

python中有哪些替代方法?

2 个答案:

答案 0 :(得分:1)

您应该进行两节课:

class MyError(Error):
    def magic_func(): pass

class MyErrorList(list, ErrorsInner):
    def my_func(): pass

l = MyErrorList(MyError(), MyError(), MyError())
l.my_func()
l.append(MyError())
for e in l:
    e.magic_func();

Python本身并不能阻止您执行l.append("I am stupid"),但是您可以使用isinstance(e, MyError)进行检查。

Python可以“扩展”多个类。

答案 1 :(得分:0)

您能否详细说明为什么第一个示例不起作用?您可以这样做:

class Errors(list):
    pass

然后在代码中:

In [2]: errors = Errors()
In [3]: errors.append('wtf')
In [4]: errors
Out[4]: ['wtf']
In [5]: errors.pop()
Out[5]: 'wtf'

以上,Errors将从list类型扩展。