Спадкування в Python

 5306

Спадкування дозволяє створити новий клас на основі існуючого класу. Новий клас, що створюється, називається підкласом (дочірній або похідний клас), а існуючий клас, від якого отримано дочірній клас, називається суперкласом (батьківський або базовий клас).

Підклас та суперклас в Python

Синтаксис спадкування в Python:

Тут ми успадковуємо клас sub_class від класу super_class.

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

Результат:

I can eat
My name is Rohu

Тут ми створили дочірній клас Dog з батьківського класу Animal. Зверніть увагу на наступний код:

Тут ми використовуємо labrador (об’єкт класу Dog) для доступу до name та eat() класу Animal. Це можливо тому, що дочірній клас успадковує всі атрибути та методи батьківського класу. Крім того, ми отримали доступ до атрибута name всередині методу класу Dog, використовуючи self.

Відносини в успадкуванні

В Python успадкування — це відносини типу is-a (є). Ми використовуємо спадкування лише в тому випадку, коли між двома класами існує зв’язок типу “є”. Наприклад:

   Автомобіль є Транспортним засобом

   Яблуко є Фруктом

   Кішка є Твариною

Автомобіль може успадковуватись від Транспортний засіб, Яблуко може успадковуватися від Фрукт і так далі.

Розглянемо ще один приклад спадкування в Python. Багатокутник — це замкнута фігура з 3 або більше сторонами. Припустимо, у нас є клас Polygon, визначений наступним чином:

Цей клас має змінні для зберігання кількості (n) та довжини (у вигляді списку під назвою sides) кожної зі сторін багатокутника.

   Метод inputSides() приймає довжину кожної сторони.

   Метод dispSides() відображає довжини цих сторін.

Трикутник — це багатокутник із трьома сторонами. Тому ми можемо створити клас Triangle, який успадковується від класу Polygon. Це зробить усі атрибути класу Polygon доступними для класу Triangle. Нам не потрібно визначати атрибути та методи знову. Наприклад:

Однак у класі Triangle є новий метод findArea() для обчислення та виводу на екран площі трикутника.

Тепер подивимося на повний робочий код програми:

Результат:

Enter side 1 : 3
Enter side 2 : 5
Enter side 3 : 4
Side 1 is 3.0
Side 2 is 5.0
Side 3 is 4.0
The area of the triangle is 6.00

Тут ми бачимо, що хоча ми не визначили методи типу inputSides() або dispSides() для класу Triangle окремо, ми змогли їх використати.

Якщо атрибут не знайдено у самому класі, пошук починається у батьківському класі. Це повторюється рекурсивно, якщо батьківський клас сам успадковується з інших класів.

Перевизначення методів у спадкуванні

З попереднього прикладу ми бачимо, що об’єкт підкласу може отримати доступ до методу суперкласу.

Але якщо один і той самий метод присутній і в суперкласі, і в підкласі?

У цьому випадку метод у підкласі перевизначає метод у суперкласі. Ця концепція відома як перевизначення методів у Python. Наприклад:

Результат:

I like to eat bones

Тут один і той самий метод eat() присутній як у класі Dog, так і в класі Animal. Коли ми викликаємо метод eat(), використовуючи об’єкт підкласу Dog, викликається метод класу Dog. Це відбувається тому, що метод eat() підкласу Dog перевизначає той самий метод суперкласу Animal.

Метод super() в спадкуванні

Раніше ми бачили, що метод з одним і тим самим ім’ям у підкласі перевизначає метод у суперкласі. Однак, якщо нам потрібно отримати доступ до методу суперкласу підкласу, ми можемо скористатися додатковим методом super(). Наприклад:

Результат:

I can eat
I like to eat bones

Тут метод eat() дочірнього класу Dog перевизначає цей самий метод батьківського класу Animal.

Всередині класу Dog ми використали наступний рядок коду, щоб викликати метод eat() батьківського класу Animal з дочірнього класу Dog:

Таким чином, коли ми викликаємо метод eat(), використовуючи об’єкт labrador:

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

Яка користь від спадкування в Python?

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

   Розробивши функціонал, ми можемо просто його успадкувати. Не потрібно наново винаходити велосипед. Це робить код чистішим і простішим у підтримці.

   Оскільки в дочірній клас можна додавати власний функціонал, то можна успадковувати лише потрібний функціонал батьківського класу, а все інше дописати в конкретному (дочірньому) класі.

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

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

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

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