Здравствуйте.
Знаю и понимаю, что такое MRO.
Но не понимаю, что такое super.
Понимаю, что super нужен, если в конструкторе мы хотим вызвать конструктор родителя.
Но ведь не только конструктор можно вызвать через super...
Из этого вопрос.
Зачем нужен super, и где это использовать?
Заранее благодарен!
Ben_r007 дорогой пользователь, настоятельно рекомендуем еще раз обратить самое пристальное внимание на п. 3.1 регламента работы сервиса (и, в особенности, на его последний абзац). В противном случае, ваши вопросы будут удаляться по причине тег-спама, а систематические нарушения приведут к блокировке учетной записи.
С помощью super() можно вызывать любые родительские методы, не только конструктор.
Кстати, __init__ -- это не конструктор, строго говоря. Он не создаёт инстанс. Инстанс создаётся в __new__, это и есть, фектически, конструктор. А __init__ -- это инициализация. Хотя в общем-то всем пофиг и конструктором его тоже все называют. Для простоты.
В питоне есть множественное наследование. super создаёт прокси-объект с интерфейсом к предкам.
В смысле? Я ж написал, чтобы вызывать перекрытые родительские методы.
У вас есть self, если вы вызовите self.method_name(), будет вызван метод самого объекта. Если такой же метод был и упредка, то он перекрыт и не может быть вызван напрямую. Вызвать его можно через super().method_name() (для 3 питона).
При этом не важно у кого из родителей класса есть этот метод. При правильном использовании super будут вызваны все.