Python如何扩展自定义模型列表
我是python新手,来自java背景 我正在开发一个sdk,它在内部调用一些rest端点,我们正在公开客户机和方法。我已经用Java完成了sdk。现在我正在用python做同样的事情。我不会手动编写代码。我用。所以我在模型结构上没有太大的灵活性。对于扩展其他模型列表的模型,生成的代码有编译错误。因此,我正在努力解决这些特殊情况 在java中,我们有以下代码: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> { //--- }
public class Errors extends ArrayList<ErrorsInner> {
//---
}
公共类错误扩展了ArrayList{
//---
}
在python中,我希望重新生成相同的代码。我尝试了以下选项。但似乎一切都不正常
这不是一个合适的解决方案,因为错误也应该正确地包含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只是一个示例名称。这个问题适用于所有自定义模型,其中该模型扩展了另一个模型的列表。模型需要一个结构。为了提供这种结构,我们需要一个类。所以模型是“类”类型的。那么,当你想谈论类的时候,为什么你坚持谈论“模型”???另外:“模型扩展另一个模型的列表”没有意义——要么你的“另一个模型的列表”是一个自定义类,然后你只需要从这个类继承(假设“扩展”意味着“继承自”-这是公认的术语),要么它是一个简单的列表(pythonlist
),然后它与你的类完全不相交“模型”类-Python列表只是一个列表,它不关心它包含什么。这对我来说不是一个合适的解决方案。这个模型应该包含来自api的响应。错误也应该正确包含ErrorsInner的参数。因此,在它被反序列化后,我可以在这个模型中找到属性。”错误也应该正确地包含ErrorsInner的参数“没有任何意义。如果你希望任何人都能理解你的问题,请使用公认的术语。我已经为这个问题标注了日期。请重新访问我的答案。请重新访问如果您告诉我们ErrorsInner
中的内容,当然会有所帮助,您不需要ErrorsInner作为MyErrorList中多重继承的超类。Python中并不真正需要Java的泛型,因为您几乎可以将任何内容放入列表中。