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

Аннотация Self

Вопрос

Как аннотировать метод-строитель def with_name(self, name), который возвращает экземпляр того же класса, чтобы наследник получал свой тип?

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

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

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

Коротко

Правильный ответ: - Self из typing (3.11+). Self означает «тип того экземпляра, у которого вызван метод», поэтому у наследника Child().withname(...) анализатор выведет Child.

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

  1. -> "Base", имя базового класса
  2. -> object, как самый общий тип
  3. -> type[Self] из typing
  4. -> Self из typing (3.11+)правильный ответ

Разбор

Self означает «тип того экземпляра, у которого вызван метод», поэтому у наследника Child().with_name(...) анализатор выведет Child. Аннотация -> "Base" у наследника даст Base, и цепочка вызовов потеряет методы наследника. object и type здесь просто неверны.

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

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