Рекурсивный ввод в Python 3.5+

В Python 3.5 добавлены аннотации типов (см. Здесь ).

Есть ли способ определения рекурсивных аннотаций типа, например, для древовидной структуры?

class Employee(object): def __init__(self, name: str, reports: List[Employee]): self.name = name self.reports = reports 

В приведенном выше примере не похоже, что работает аннотационный List[Employee] . Результатом этой ошибки является запуск кода:

NameError: name 'Employee' is not defined

One Solution collect form web for “Рекурсивный ввод в Python 3.5+”

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

Ситуация, в которой это обычно происходит, – это определение класса контейнера, где определяемый класс встречается в сигнатуре некоторых методов. Например, следующий код (начало простой реализации двоичного дерева) не работает:

 class Tree: def __init__(self, left: Tree, right: Tree): self.left = left self.right = right 

Чтобы решить эту проблему, мы пишем:

 class Tree: def __init__(self, left: 'Tree', right: 'Tree'): self.left = left self.right = right 

Допустимо использовать строковые литералы как часть подсказки типа, например:

 class Tree: ... def leaves(self) -> List['Tree']: 
  • Python: разные результаты при использовании PyCharm и IDLE / python
  • доступ к динамическому массиву python
  • Python RandomForest - Неизвестная метка Ошибка
  • Python - что НЕ в 2.7, что IS в 3.1? Так много вещей было перенесено, что НЕ?
  • Разделить текст на предложения
  • Заменить строку в списке списков
  • Импортируйте txt-файл и имея каждую строку в виде списка
  • Pyinstaller автоматически включает в себя ненужные модули
  • matplotlib 3D plot, plot_surface black
  • список в Python3.6
  • Использование bisect для расчесывания предметов с условием расстояния
  •  
    Interesting Posts for Van-Lav
    Python - лучший язык программирования в мире.