Множинне успадкування в Python

 4444

В Python один клас може успадковуватися відразу від декількох батьківських класів. Це називається множинним успадкуванням. Дочірній клас може успадковувати не тільки батьківський клас, а й інший дочірній клас. Така форма спадкування відома як багаторівневе спадкування. Якщо два батьківських класи мають однакове ім’я методу і дочірній клас (який успадковує 2 батьківські класи) викликає цей метод, Python використовує MRO (порядок виклику методів) для виклику потрібного методу.

Множинне успадкування в Python

В Python один клас може успадковуватися відразу від декількох батьківських класів. Це називається множинним успадкуванням.

Наприклад, клас Bat є дочірнім від батьківських класів Mammal та WingedAnimal. Це має сенс, тому що кажан є як ссавцем, так і крилатою твариною.

Синтаксис множинного успадкування в Python:

Тут клас MultiDerived є дочірнім від класів SuperClass1 та SuperClass2.

Розглянемо приклад на практиці:

Результат:

Mammals can give direct birth.
Winged animals can flap.

Тут клас Bat є дочірнім від двох батьківських класів: Mammal та WingedAnimal. Зверніть увагу на наступні рядки коду:

Тут ми використовуємо b1 (об’єкт класу Bat) для доступу до методів mammal_info() і winged_animal_info() класів Mammal та WingedAnimal відповідно.

Багаторівневе спадкування в Python

В Python дочірній клас може успадковувати не лише батьківський клас, а й інший дочірній клас. Така форма спадкування відома як багаторівневе спадкування.

Синтаксис багаторівневого спадкування в Python:

Тут клас DerivedClass1 є дочірнім від класу SuperClass, а DerivedClass2 є дочірнім від класу DerivedClass1.

Розглянемо приклад багаторівневого спадкування в Python:

Результат:

Super Class method called
Derived class 1 method called
Derived class 2 method called

Тут DerivedClass2 є дочірнім від класу DerivedClass1, який є дочірнім від класу SuperClass. Це означає, що DerivedClass2 успадковує всі атрибути та методи як DerivedClass1, так і SuperClass.

Відповідно, ми використовуємо d2 (об’єкт класу DerivedClass2) для виклику методів із класів SuperClass, DerivedClass1 та DerivedClass2.

Порядок виклику методів (MRO) в Python

Якщо два батьківських класи мають однакове ім’я методу та дочірній клас (який успадковує 2 батьківські класи) викликає цей метод, Python використовує MRO (порядок виклику методів) для виклику потрібного методу. Наприклад:

Результат:

"Super Class 1 method called"

Тут обидва класи SuperClass1 та SuperClass2 мають метод info(). Коли метод info() викликається за допомогою об’єкта d1 класу Derived, Python використовує MRO, щоб визначити, метод якого класу слід викликати.

В цьому випадку MRO визначає, що методи повинні успадковуватися спочатку від найлівішого батьківського класу:

Тому викликається метод info() класу SuperClass1, а не класу SuperClass2.

Оцінити статтю:

1 Зірка2 Зірки3 Зірки4 Зірки5 Зірок (13 оцінок, середня: 5,00 з 5)
Завантаження...

Залишити відповідь

Ваш E-mail не буде опублікований. Обов'язкові поля відмічені *