Найти в Дзене
10,2 тыс подписчиков

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


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

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
>>>

Ответ

Для этого можно вызвать функцию в родительском классе при помощи 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() можете почитать в документации.

#junior

Около минуты
860 читали