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

Приоритет методов при множественном наследовании в ООП в Python

Если в классе-потомке и в родителе есть одноименный метод, то метод потомка переопределит метод родителя:

class TestMixin: # Метод с именем method: def method(self): return 'mixin' class TestClass(TestMixin): # Такой же метод с именем method: def method(self): return 'test' test = TestClass() print(test.method()) # выведет 'test' - сработал метод самого класса

Если же сам класс не имеет такого метода, но имеется конфликт имен методов примеси и методов родительского класса, то порядок родителей в скобках задает приоритет. Родитель, стоящий левее, проверяется раньше в цепочке поиска методов.

class TestMixin: def method(self): return 'mixin' # Родительский класс: class ParentClass: def method(self): return 'parent' # Примесь левее - ее method найдут первым: class TestClass(TestMixin, ParentClass): pass test = TestClass() print(test.method()) # выведет 'mixin'

Полный порядок поиска методов хранится в атрибуте __mro__ класса (method resolution order). Давайте выведем его:

print(TestClass.__mro__)

Список идет от самого класса к object. Именно по этой цепочке Python ищет метод, когда вы его вызываете.

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