JSON, список может быть пустым - какой тип? - PullRequest
0 голосов
/ 03 сентября 2018

Я хочу указать объект, который имеет свойство prizes. Это может быть либо список PrizeInfo объектов, либо пустой список. Я ищу схему, похожую на приведенный ниже код, за исключением того, что возвращается следующая ошибка:

"MySchema": {
    "properties": {
        "prizes": {
            "type": "List['PrizeInfo', 'null']",
        }
    }
 }

E   TypeError: Too many parameters for typing.List; actual 2, expected 1

Я использую эти шаблоны для генерации классов Python.

1 Ответ

0 голосов
/ 03 сентября 2018

Нет аннотации для «пустого» списка. Любой пустой объект списка будет удовлетворять подсказке типа List[...], независимо от того, каким должно быть содержимое списка.

Так что, если пустой список разрешен, используйте

List['PrizeInfo']

Это позволяет использовать любой список с 0 или более элементами, поэтому в этот совет включается пустой список.

Если вместо этого вы хотели сказать, что None значения (null в JSON) разрешены рядом с PrizeInfo объектами, то используйте аннотацию Union[...] с None:

List[Union['PrizeInfo', None]]

Если вы хотите сказать, что разрешен либо None, либо список PrizeInfo объектов (в терминах JSON, null или массив), тогда используйте

Union[List['PrizeInfo'], None]

Вы также можете использовать Optional[...]:

Optional[List['PrizeInfo']]

означать то же самое. Однако я бы не стал использовать это в подсказке List[...]; это читается так, как будто вы говорите, что тип элементов может быть необязательным, что приводит к запутанной спецификации типа.

...