← Все вопросы
При переопределении метода в наследнике — как вызвать версию родителя?
14
Наследую класс, переопределяю __init__, но мне всё ещё нужно, чтобы отработала инициализация родителя (он там какие-то поля заводит). Как из дочернего __init__ вызвать родительский, не дублируя код?
3 ответа
21
✓ Принятый ответ — помог автору
Через super():
class Animal:
def __init__(self, name):
self.name = name
class Dog(Animal):
def __init__(self, name, breed):
super().__init__(name) # вызов родительского __init__
self.breed = breed
super().__init__(name) запускает __init__ родителя, поэтому self.name появится, а ты сверху доберёшь свои поля. Так же можно вызвать любой переопределённый метод: super().some_method(). Не пиши Animal.__init__(self, name) напрямую — super() правильно работает при множественном наследовании (учитывает MRO), а явное имя класса ломается.
Михаил Якимов super() без аргументов работает только в Python 3, в py2 надо было super(Dog, self) · 2 дня назад
8
super().__init__(...). Не забудь передать туда нужные аргументы родителя.
2
super().
Ваш ответ
Войдите, чтобы ответить на вопрос.