Python Множественное наследование — Python MRO (Method Resolution Order) за 1 минуту

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'>]
Вход в полноэкранный режим Выход из полноэкранного режима

Если у вас есть вопросы по концепции, не стесняйтесь добавлять комментарии.😁

Оцените статью
Procodings.ru
Добавить комментарий