Импорты только для проверки типов
Иногда модуль нужен исключительно для аннотаций. Импортировать его на уровне модуля — значит рисковать циклическим импортом и платить за загрузку в рантайме. Решение — флаг TYPE_CHECKING.
from __future__ import annotations
from typing import TYPE_CHECKING
if TYPE_CHECKING:
from .models import User # только для mypy и редактора
def greet(user: User) -> str:
return f"Привет, {user.name}"
Во время выполнения этот импорт не происходит: TYPE_CHECKING равен False. А благодаря from __future__ import annotations аннотации хранятся как строки и не требуют, чтобы User существовал в рантайме.
Это особенно выручает в крупных проектах с перекрёстными ссылками между модулями моделей и сервисов.