Python как расширить список пользовательских моделей - PullRequest
0 голосов
/ 31 января 2019

Я новичок в Python и пришел из Java-фона.

Я работаю над sdk, который внутренне вызывает некоторые конечные точки отдыха, и мы выставляем клиента и методы.Я сделал SDK в Java.Теперь я делаю то же самое в Python.Я не пишу код вручную.Я использую swagger-code-gen .Поэтому у меня нет большой гибкости в структуре модели.Для моделей, которые расширяют список других моделей, сгенерированный код имеет ошибки компиляции.Поэтому я пытаюсь исправить эти конкретные случаи.

В Java у нас есть код:

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

В Python я хочу заново сгенерировать тот же код.Я попробовал ниже варианты.но, похоже, ничего не работает должным образом.:

  1. class Ошибки (список):

    Это неправильное решение, поскольку ошибки должны правильно содержать параметры ErrorsInner.Так что после десериализации я могу найти свойства в этой модели.

  2. из набора импорта Импорт списка

    класса (List [ErrorsInner]):

Я должен создать модель "Ошибки", чтобы ее можно было легко десериализовать и сериализовать.

Какие альтернативы доступны в Python?

Ответы [ 2 ]

0 голосов
/ 31 января 2019

Вы должны сделать два класса:

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 может «расширяться»несколько классов.

0 голосов
/ 31 января 2019

Можете ли вы объяснить, почему ваш первый пример не работает?Вы можете сделать:

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 типа.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...