Выбор ответа Senior ООП и dataclasses обновлено
Что вызывается при создании экземпляра
Вопрос
Что на самом деле происходит при выполнении obj = MyClass(1)?
Попробуйте сами
Выберите вариант, и откроется разбор.
Показать ответ и разбор
Коротко
Правильный ответ: type(MyClass).call вызывает new, затем init. Класс это объект, и вызов MyClass(1) обращается к call его метакласса (по умолчанию type.call).
Варианты ответа
- Вызывается только
MyClass.__init__, объект создаёт интерпретатор type(MyClass).__call__вызывает__new__, затем__init__правильный ответ- Вызывается
MyClass.__call__, определённый в самом классе - Сначала
__init__заполняет поля, затем__new__создаёт объект
Разбор
Класс это объект, и вызов MyClass(1) обращается к __call__ его метакласса (по умолчанию type.__call__). Он вызывает __new__ для создания объекта и __init__ для настройки, причём __init__ пропускается, если __new__ вернул объект другого класса. MyClass.__call__ срабатывает при вызове экземпляра, а не класса. Переопределив __call__ в метаклассе, можно, например, сделать синглтон.
Ответьте сами, а не прочитайте
В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.