типизация· 2 мин

Импорты только для проверки типов

Иногда модуль нужен исключительно для аннотаций. Импортировать его на уровне модуля — значит рисковать циклическим импортом и платить за загрузку в рантайме. Решение — флаг 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 существовал в рантайме.

Это особенно выручает в крупных проектах с перекрёстными ссылками между модулями моделей и сервисов.

← ко всем заметкам