Рекурсивные аннотации типа - PullRequest
0 голосов
/ 05 декабря 2018

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

  • bool
  • str
  • float
  • int
  • list
  • dict

Однако list иdict выше может содержать такой же словарь, что приводит к рекурсивному определению.Это представимо в структуре типов Python3?

1 Ответ

0 голосов
/ 05 декабря 2018

Начиная с mypy 0.641, mypy не поддерживает искомую рекурсивную аннотацию типа, которую вы ищете.Естественный синтаксис:

from typing import Union, Dict, List

JSONVal = Union[None, bool, str, float, int, List['JSONVal'], Dict[str, 'JSONVal']]

d: JSONVal = {'a': ['b']}

выдает ошибку, сообщающую об отсутствии поддержки рекурсивного типа:

$ mypy asdf.py
asdf.py:3: error: Recursive types not fully supported yet, nested types replaced with "Any"

Также см. Поток отслеживания проблем mypy о поддержке рекурсивного типа.

Пока что, вероятно, Dict[str, Any] - это путь.

...