Множественное наследование Python
Множественное наследование Python
В этом руководстве вы узнаете о множественном наследовании в Python и о том, как использовать его в своей программе. Вы также узнаете о многоуровневом наследовании и порядке разрешения методов.
Множественное наследование Python
Класс может быть получен более чем из одного базового класса в Python, аналогично C++. Это называется множественным наследованием.
При множественном наследовании свойства всех базовых классов наследуются производным классом. Синтаксис множественного наследования аналогичен одиночному наследованию.
Пример
00
Здесь MultiDerived класс является производным от Base1 и Base2 классы.
<рисунок>
Многопроизводный класс наследуется как от Base1 и Base2 классы.
<час>Многоуровневое наследование Python
Мы также можем наследовать от производного класса. Это называется многоуровневым наследованием. В Python это может быть любой глубины.
При многоуровневом наследовании функции базового класса и производного класса наследуются новым производным классом.
Ниже приведен пример с соответствующей визуализацией.
10пре>Здесь Derived1 класс является производным от Base класс и Derived2 класс является производным от Derived1 класс.
<рисунок><час>
Порядок разрешения методов в Python
Каждый класс в Python является производным от
02
учебный класс. Это самый базовый тип в Python.Таким образом, технически все остальные классы, как встроенные, так и определяемые пользователем, являются производными классами, а все объекты являются экземплярами класса
19
. класс.27В сценарии множественного наследования любой указанный атрибут сначала ищется в текущем классе. Если не найдено, поиск продолжается в родительских классах в глубину, влево-вправо без двойного поиска в одном и том же классе.
Итак, в приведенном выше примере
29
class порядок поиска [37
,44
,59
,63
]. Этот порядок также называется линеаризацией76
. класс, а набор правил, используемых для поиска этого порядка, называется Порядок разрешения методов (MRO). .MRO должен предотвращать локальный порядок приоритета, а также обеспечивать монотонность. Это гарантирует, что класс всегда появляется перед его родителями. В случае нескольких родителей порядок такой же, как у кортежей базовых классов.
MRO класса можно рассматривать как
89
атрибут или95
метод. Первый возвращает кортеж, а второй возвращает список.31Вот немного более сложный пример множественного наследования и его визуализация вместе с MRO.
<рисунок>
40Вывод
58Чтобы узнать фактический алгоритм расчета MRO, посетите Обсуждение MRO.
Python