Выбор ответа Middle Типизация обновлено

Зачем if TYPE_CHECKING

Вопрос

Зачем пишут if TYPE_CHECKING: from app.models import User?

Попробуйте сами

Выберите вариант, и откроется разбор.

Показать ответ и разбор

Коротко

Правильный ответ: Импорт только для аннотаций, в рантайме его нет. typing.TYPECHECKING равен False во время выполнения и считается True анализаторами.

Варианты ответа

  1. Чтобы импорт выполнялся только в тестах под pytest
  2. Чтобы ускорить mypy за счёт пропуска модуля
  3. Импорт только для аннотаций, в рантайме его нетправильный ответ
  4. Чтобы импорт выполнялся только в отладочном режиме

Разбор

typing.TYPE_CHECKING равен False во время выполнения и считается True анализаторами. Поэтому такой импорт виден mypy, но не исполняется, и цикл «модели импортируют сервисы, сервисы импортируют модели» не возникает. Аннотации с таким именем пишут строкой или полагаются на ленивые аннотации (3.14, PEP 649). С тестами и отладкой это не связано.

Ответьте сами, а не прочитайте

В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.