Определение рекурсивной подсказки типа в Python? - PullRequest
0 голосов
/ 19 декабря 2018

Допустим, у меня есть функция, которая принимает Garthok, Iterable[Garthok], Iterable[Iterable[Garthok]] и т. Д.

def narfle_the_garthoks(arg):
  if isinstance(arg, Iterable):
    for value in arg:
       narfle(arg)
  else:
    arg.narfle()

Есть ли способ указать подсказку типа для arg, которая указываетчто он принимает любой уровень Iterable с Garthok с?Я подозреваю, что нет, но подумал, что проверю, не упустил ли я что-то.

В качестве обходного пути я просто указываю несколько уровней глубиной, а затем заканчиваю Iterable[Any].

Union[Garthok,
    Iterable[Union[Garthok,
        Iterable[Union[Garthok, 
            Iterable[Union[Garthok, Iterable[Any]]]]]]]]

1 Ответ

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

Вы можете указать рекурсивные типы в языке ввода, используя псевдонимы типов и строки прямых ссылок ,

Garthoks = Union[Garthok, Iterable['Garthoks']]

Но рекурсивные типы пока не поддерживаютсяmypy, хотя это, вероятно, произойдет в конце концов.

...