← Все вопросы

При переопределении метода в наследнике — как вызвать версию родителя?

Задан 6 дней назад467 просмотров3 ответа
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().

Ваш ответ

Войдите, чтобы ответить на вопрос.
Поддержать проект