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

Когда нужен @overload

Вопрос

Функция get(key, default=None) возвращает str, если default строка, и str | None, если default не передан. Как выразить это точно?

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

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

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

Коротко

Правильный ответ: Несколько сигнатур с @overload и одна реализация. @overload описывает несколько вариантов сигнатуры для анализатора, а последняя функция без декоратора это реализация.

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

  1. Несколько сигнатур с @overload и одна реализацияправильный ответ
  2. -> Any, анализатор сам выведет тип
  3. -> str | None для всех случаев
  4. Две функции с одинаковым именем без декораторов

Разбор

@overload описывает несколько вариантов сигнатуры для анализатора, а последняя функция без декоратора это реализация. Тогда get("a", "x") типизирован как str, без лишней проверки на None. Any и общий str | None теряют точность, а вторая функция без декораторов просто перезапишет первую.

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

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