Один из методов - использовать typing.TYPE_CHECKING
константу . Эта константа всегда ложна во время выполнения, но обрабатывается так, как если бы она всегда была истинной с помощью средств проверки типов, таких как mypy:
from __future__ import annotations
from typing import TYPE_CHECKING, Union, Mapping
if TYPE_CHECKING:
MyType1 = Union[str, MyType2]
MyType2 = Mapping[str, MyType1]
Поскольку эта константа имеет значение False во время выполнения, Python никогда не будет пытаться оценить псевдоним любого типа, что позволяет избежать ошибки NameError.
Вам нужно будет либо использовать директиву from __future__ import annotations
, либо использовать строковые литеральные типы всякий раз, когда вы, конечно, используете любой тип подсказки.