Выбор ответа Middle Типизация обновлено
Зачем if TYPE_CHECKING
Вопрос
Зачем пишут if TYPE_CHECKING: from app.models import User?
Попробуйте сами
Выберите вариант, и откроется разбор.
Показать ответ и разбор
Коротко
Правильный ответ: Импорт только для аннотаций, в рантайме его нет. typing.TYPECHECKING равен False во время выполнения и считается True анализаторами.
Варианты ответа
- Чтобы импорт выполнялся только в тестах под pytest
- Чтобы ускорить mypy за счёт пропуска модуля
- Импорт только для аннотаций, в рантайме его нетправильный ответ
- Чтобы импорт выполнялся только в отладочном режиме
Разбор
typing.TYPE_CHECKING равен False во время выполнения и считается True анализаторами. Поэтому такой импорт виден mypy, но не исполняется, и цикл «модели импортируют сервисы, сервисы импортируют модели» не возникает. Аннотации с таким именем пишут строкой или полагаются на ленивые аннотации (3.14, PEP 649). С тестами и отладкой это не связано.
Ответьте сами, а не прочитайте
В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.