Приоритет методов при множественном наследовании в ООП в 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 ищет метод,
когда вы его вызываете.