Возможно ли при наследовании методы объединять, а не заменять?

Рейтинг: 4Ответов: 1Опубликовано: 06.03.2023

Например есть родительский класс и дочерний, который наследуется от него

class Parent():
    def test(self):
        print('inside parent')

class Child(Parent):
    def test(self):
        print('inside child')

при вызове метода экземпляра дочернего класса с тем же названием вызывается функция из дочернего класса, перезаписывая родительскую

>>> b1 = Child()
>>> b1.test()
inside child
>>>

Вопрос: можно ли сделать так чтобы дочерний метод не перезаписывал родительский, а добавлялся к нему и они выполнялись бы вместе и поочередно (сначала родительский потом дочерний)? Чтобы получилось вот так:

>>> b1.test()
inside parent
inside child
>>>

Ответы

▲ 6Принят

Для этого можно вызвать функцию в родительском классе при помощи super().

class Parent:
    def test(self):
        print('inside parent')


class Child(Parent):
    def test(self):
        super().test()
        print('inside child')


b1 = Child()
b1.test()

Вывод:

inside parent
inside child

Подробнее про функцию super() можете почитать в документации.