Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python如何扩展自定义模型列表_Python_Python 3.x_List - Fatal编程技术网

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

Python如何扩展自定义模型列表,python,python-3.x,list,Python,Python 3.x,List,我是python新手,来自java背景 我正在开发一个sdk,它在内部调用一些rest端点,我们正在公开客户机和方法。我已经用Java完成了sdk。现在我正在用python做同样的事情。我不会手动编写代码。我用。所以我在模型结构上没有太大的灵活性。对于扩展其他模型列表的模型,生成的代码有编译错误。因此,我正在努力解决这些特殊情况 在java中,我们有以下代码: public class Errors extends ArrayList<ErrorsInner> { //--- }

我是python新手,来自java背景

我正在开发一个sdk,它在内部调用一些rest端点,我们正在公开客户机和方法。我已经用Java完成了sdk。现在我正在用python做同样的事情。我不会手动编写代码。我用。所以我在模型结构上没有太大的灵活性。对于扩展其他模型列表的模型,生成的代码有编译错误。因此,我正在努力解决这些特殊情况

在java中,我们有以下代码:

public class Errors extends ArrayList<ErrorsInner> {
 //---
}
公共类错误扩展了ArrayList{
//---
}
在python中,我希望重新生成相同的代码。我尝试了以下选项。但似乎一切都不正常

  • 类错误(列表):


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

  • 从输入导入列表开始

    类错误(列表[ErrorsInner]):

  • 我应该创建“错误”模型,这样它就可以轻松地反序列化和序列化


    python中有哪些替代方案?

    能否详细说明第一个示例不起作用的原因?你可以做:

    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'
    

    上面,
    错误
    将从
    列表
    类型扩展。

    您应该创建两个类:

    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(“我很笨”)
    ,但是您可以使用
    isinstance(e,MyError)
    进行检查


    Python可以“扩展”多个类

    Python不像Java那样是静态类型语言。只需使用
    列表
    ,将您的错误设置为
    元组、命名元组或dicts
    。除非您要维护一个状态,否则为什么还要麻烦处理类呢。您还应该更新问题,使其包含您试图解决的问题,而不是您试图如何解决的问题。@BhathiyaPerera我已经更新了问题,请重新考虑您称之为“模型”的内容?上课?“错误也应该包含错误罪人的参数”是什么意思?你是说“应该从罪人那里继承”吗?术语有一个原因:确保我们都知道我们在谈论什么,所以如果你不使用合适的术语,我们就无法真正理解这个问题。@Brunodesshuilliers Errors只是一个示例名称。这个问题适用于所有自定义模型,其中该模型扩展了另一个模型的列表。模型需要一个结构。为了提供这种结构,我们需要一个类。所以模型是“类”类型的。那么,当你想谈论类的时候,为什么你坚持谈论“模型”???另外:“模型扩展另一个模型的列表”没有意义——要么你的“另一个模型的列表”是一个自定义类,然后你只需要从这个类继承(假设“扩展”意味着“继承自”-这是公认的术语),要么它是一个简单的列表(python
    list
    ),然后它与你的类完全不相交“模型”类-Python列表只是一个列表,它不关心它包含什么。这对我来说不是一个合适的解决方案。这个模型应该包含来自api的响应。错误也应该正确包含ErrorsInner的参数。因此,在它被反序列化后,我可以在这个模型中找到属性。”错误也应该正确地包含ErrorsInner的参数“没有任何意义。如果你希望任何人都能理解你的问题,请使用公认的术语。我已经为这个问题标注了日期。请重新访问我的答案。请重新访问如果您告诉我们
    ErrorsInner
    中的内容,当然会有所帮助,您不需要ErrorsInner作为MyErrorList中多重继承的超类。Python中并不真正需要Java的泛型,因为您几乎可以将任何内容放入列表中。