Короткий ответ
Да, Python поддерживает множественное наследование: один класс может наследовать сразу от нескольких базовых. Такой класс получает доступ к атрибутам и методам каждого из родителей, а конфликты одноимённых методов разрешаются по порядку MRO.
Как это работает подробнее
- Синтаксис. После имени класса в скобках через запятую перечисляются все родители, например
class C(A, B). - Доступ к членам. Дочерний класс получает атрибуты и методы всех перечисленных базовых классов.
- Примеси. Множественное наследование удобно для реализации mixins — небольших вспомогательных классов, добавляющих функциональность.
- Неоднозначность. Если два родителя определяют метод с одним именем, Python выбирает реализацию по MRO, что детерминированно решает проблему ромба.
Пример кода
Класс, наследующий от двух родителей
class A:
def method_a(self):
print('Method from class A')
class B:
def method_b(self):
print('Method from class B')
class C(A, B): # класс C наследует от A и B одновременно
pass
obj = C()
obj.method_a() # Method from class A
obj.method_b() # Method from class BЧто использовать на практике
- Примеси. Применяй множественное наследование для небольших mixins, добавляющих классам отдельные возможности.
- Порядок родителей. Выбирай порядок перечисления базовых классов осознанно — от него зависит MRO.
- Простота. Если достаточно одного родителя, не добавляй лишних: чем проще иерархия, тем легче её поддерживать.