Спадкування Python (з прикладами)

Спадщина дозволяє нам визначити клас, який бере всі функції батьківського класу і дозволяє додавати більше. У цьому підручнику ви навчитеся використовувати успадкування в Python.

Відео: Спадщина Python

Спадщина в Python

Спадкування є потужною функцією об'єктно-орієнтованого програмування.

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

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

 class BaseClass: Тіло класу базового класу DerivedClass (BaseClass): Тіло похідного класу

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

Приклад успадкування в Python

Для демонстрації використання спадщини візьмемо приклад.

Багатокутник - це замкнута фігура з 3 і більше сторонами. Скажімо, у нас є клас, який називається Polygonтаким чином.

 class Polygon: def __init__(self, no_of_sides): self.n = no_of_sides self.sides = (0 for i in range(no_of_sides)) def inputSides(self): self.sides = (float(input("Enter side "+str(i+1)+" : ")) for i in range(self.n)) def dispSides(self): for i in range(self.n): print("Side",i+1,"is",self.sides(i))

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

inputSides()Метод приймає в величині з кожного боку , і dispSides()відображає ці бічні довжини.

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

Нам не потрібно їх визначати знову (багаторазове використання коду). Трикутник можна визначити наступним чином.

 class Triangle(Polygon): def __init__(self): Polygon.__init__(self,3) def findArea(self): a, b, c = self.sides # calculate the semi-perimeter s = (a + b + c) / 2 area = (s*(s-a)*(s-b)*(s-c)) ** 0.5 print('The area of the triangle is %0.2f' %area)

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

 >>> t = Triangle() >>> t.inputSides() Enter side 1 : 3 Enter side 2 : 5 Enter side 3 : 4 >>> t.dispSides() Side 1 is 3.0 Side 2 is 5.0 Side 3 is 4.0 >>> t.findArea() The area of the triangle is 6.00

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

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

Заміна методу в Python

У наведеному вище прикладі зауважте, що __init__()метод був визначений в обох класах, як Трикутник, так і Багатокутник. Коли це трапляється, метод у похідному класі замінює метод у базовому класі. Це означає, що __init__()у Трикутнику набуває переваги над __init__у Полігоні.

Як правило, замінюючи базовий метод, ми прагнемо розширити визначення, а не просто замінити його. Те саме робиться шляхом виклику методу в базовому класі з методу в похідному класі (виклику Polygon.__init__()з __init__()in Triangle).

Кращим варіантом буде використання вбудованої функції super(). Отже, super().__init__(3)еквівалент Polygon.__init__(self,3)і є кращим. Щоб дізнатись більше про super()функцію в Python, відвідайте функцію Python super ().

Дві вбудовані функції isinstance()і issubclass()використовуються для перевірки спадковості.

Функція isinstance()повертається, Trueякщо об’єкт є екземпляром класу або інших класів, похідних від нього. Кожен клас у Python успадковує від базового класу object.

 >>> isinstance(t,Triangle) True >>> isinstance(t,Polygon) True >>> isinstance(t,int) False >>> isinstance(t,object) True

Подібним чином issubclass()використовується для перевірки успадкування класу.

 >>> issubclass(Polygon,Triangle) False >>> issubclass(Triangle,Polygon) True >>> issubclass(bool,int) True

Цікаві статті...