Python является высокоориентированным объектно-ориентированным языком. Это означает, что все в Python является объектом, что позволяет относительно легко строить логику ООП с помощью Python.
Если вы занимаетесь множественным наследованием, вы должны знать о Python Method Resolution Order.
Прежде чем погрузиться в эту концепцию, давайте быстро напомним вам, как написать класс с несколькими родительскими классами.
Чтобы заставить класс наследоваться от нескольких классов python, мы пишем имена этих классов внутри круглых скобок в производном классе при его определении.
Эти имена мы разделяем запятыми.
class Animal:
pass
class Bird:
pass
class Duck(Animal, Bird):
pass
Давайте теперь объясним Python MRO.
Python MRO (Method Resolution Order)
При поиске атрибута в классе, участвующем в множественном наследовании, соблюдается определенный порядок.
Во-первых, поиск начинается с текущего класса. Если атрибут не найден, поиск переходит к родительским классам слева направо.
Давайте повторим пример и добавим несколько атрибутов.
class Animal:
pass
class Bird:
bird_type = "wings"
class Duck(Animal, Bird):
pass
duck = Duck()
duck.bird_type
будет искать сначала в Duck
, затем Animal
, и наконец Bird
.
Утка => Животное => Птица
Чтобы получить MRO класса, можно использовать либо атрибут mro, либо метод mro().
Duck.mro()
[<class '__main__.Duck'>, <class '__main__.Animal'>, <class '__main__.Bird'>, <class 'object'>]
Если у вас есть вопросы по концепции, не стесняйтесь добавлять комментарии.😁