Следите за новинками
в нашем Telegram канале. Жми, чтобы подписаться:)
⊗pyOpMiCf 146 of 174 menu
◀ ▶

Разрешение конфликтов методов при множественном наследовании в ООП в Python

Так как один класс может наследовать несколько родителей, то нас может поджидать проблема, возникающая тогда, когда два родителя имеют одноименные методы.

В Python при обычном вызове сработает только один из них. Побеждает тот родитель, который стоит левее в скобках при объявлении класса. Как это проверить - посмотрим на практике.

Пусть у нас есть две примеси с одинаковым методом method:

class Mixin1: def method(self): return 1 class Mixin2: def method(self): return 2

Пусть у нас также есть класс Test, наследующий обе примеси. Порядок в скобках решает, какой method вызовется через объект:

class Test(Mixin1, Mixin2): pass test = Test() print(test.method()) # выведет 1

Поменяем местами родителей в объявлении класса - левее в скобках будет Mixin2, поэтому вызовется его метод:

class Test(Mixin2, Mixin1): pass test = Test() print(test.method()) # выведет 2

Если нужны оба варианта одного имени, в Python нет отдельного оператора выбора, как в PHP. Второй метод можно вызвать явно через имя класса-примеси:

class Test(Mixin1, Mixin2): def both(self): return Mixin1.method(self) + Mixin2.method(self) test = Test() print(test.both()) # выведет 3

Сделайте 3 класса-примеси с названиями Mixin1, Mixin2 и Mixin3. Пусть в первой примеси будет метод method, возвращающий 1, во второй - одноименный метод, возвращающий 2, а в третьей - одноименный метод, возвращающий 3.

Сделайте класс Test, наследующий все три созданные нами примеси. Сделайте в этом классе метод get_sum, возвращающий сумму результатов одноименных методов всех трех примесей (вызовите каждый метод через имя своего класса).

← →
↑
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить