Функція super() в Python

 6143

Функція super() повертає проксі-об’єкт (тимчасовий об’єкт суперкласу), який дозволяє отримати доступ до методів базового класу. Наприклад:

Результат:

Animal Type: Mammal
Mammals give birth directly

Синтаксис функції super()

Параметри функції super()

Функція super() не приймає жодних параметрів.

Використання функції super()

В Python функція super() має два основні варіанти використання:

   дозволяє уникнути явного використання імені базового класу;

   робота з множинним успадкуванням.

Приклад №1: Функція super() з одинарним успадкуванням

У разі одинарного успадкування ми використовуємо функцію super() для посилання на базовий клас:

Результат:

Dog has four legs.
Dog is a warm-blooded animal.

Тут ми викликали метод __init__() класу Mammal (з класу Dog) за допомогою наступного рядка коду:

замість

Оскільки нам не потрібно вказувати ім’я базового класу, коли ми викликаємо його члени, ми можемо легко змінити ім’я базового класу (за потреби).

Вбудована функція super() повертає проксі-об’єкт, який заміщує об’єкт, який може викликати методи базового класу за допомогою делегування. Це називається перенаправленням (можливість посилатися на базовий об’єкт за допомогою функції super()).

Оскільки перенаправлення виявляється під час виконання, ми можемо використовувати різні базові класи у різний час (за потреби).

Приклад №2: Функція super() з множинним успадкуванням

Результат:

Dog has 4 legs.
Dog can't swim.
Dog can't fly.
Dog is a warm-blooded animal.
Dog is an animal.

Bat can't swim.
Bat is a warm-blooded animal.
Bat is an animal.

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

Порядок виклику методів (скор. “MRO” від англ. “Method Resolution Order“) — це порядок, у якому методи повинні успадковуватися за наявності множинного успадкування. Ми можемо переглянути MRO за допомогою атрибуту __mro__. Наприклад:

Ось як працює MRO:

  метод похідного класу завжди викликається раніше методу базового класу. У нашому прикладі клас Dog викликається перед NonMarineMammal або NoneWingedMammal. Ці два класи викликаються перед Mammal, який викликається перед Animal, а клас Animal викликається перед object;

  якщо батьків декілька, наприклад, Dog(NonMarineMammal, NonWingedMammal), то методи NonMarineMammal викликаються першими, тому що цей клас з’являється першим.

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

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

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

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