Поліморфізм у Python (з прикладами)

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

Що таке поліморфізм?

Буквальне значення поліморфізму - це умова виникнення в різних формах.

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

Візьмемо приклад:

Приклад 1: Поліморфізм оператора додавання

Ми знаємо, що +оператор широко використовується в програмах Python. Але він не використовує жодного разу.

Для цілочисельних типів даних +оператор використовується для виконання операції додавання арифметики.

 num1 = 1 num2 = 2 print(num1+num2) 

Отже, вищезазначена програма виводить 3.

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

 str1 = "Python" str2 = "Programming" print(str1+" "+str2) 

Як результат, вищевказана програма виводить програмування на Python.

Тут ми бачимо, що один оператор +був використаний для здійснення різних операцій для різних типів даних. Це одне з найпростіших явищ поліморфізму в Python.

Поліморфізм функції в Python

У Python є деякі функції, сумісні для запуску з різними типами даних.

Однією з таких функцій є len()функція. Він може працювати з багатьма типами даних у Python. Давайте розглянемо деякі приклади використання функції.

Приклад 2: Поліморфна функція len ()

 print(len("Programiz")) print(len(("Python", "Java", "C"))) print(len(("Name": "John", "Address": "Nepal"))) 

Вихідні дані

 9 3 2 

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

Поліморфізм функції len () у Python

Поліморфізм класу в Python

Поліморфізм - дуже важливе поняття в об’єктно-орієнтованому програмуванні.

Щоб дізнатись більше про ООП у Python, відвідайте: Об’єктно-орієнтоване програмування Python

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

Потім ми можемо узагальнити виклик цих методів, нехтуючи об’єктом, з яким ми працюємо. Давайте розглянемо приклад:

Приклад 3: Поліморфізм у методах класів

 class Cat: def __init__(self, name, age): self.name = name self.age = age def info(self): print(f"I am a cat. My name is (self.name). I am (self.age) years old.") def make_sound(self): print("Meow") class Dog: def __init__(self, name, age): self.name = name self.age = age def info(self): print(f"I am a dog. My name is (self.name). I am (self.age) years old.") def make_sound(self): print("Bark") cat1 = Cat("Kitty", 2.5) dog1 = Dog("Fluffy", 4) for animal in (cat1, dog1): animal.make_sound() animal.info() animal.make_sound() 

Вихідні дані

Мяу Я кішка. Мене звати Кіті. Мені 2,5 роки. Мяу Барк Я собака. Мене звуть Пухнастий. Мені 4 роки. Кора

Тут ми створили два класи Catта Dog. Вони мають схожу структуру і мають однакові назви методів info()і make_sound().

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

Поліморфізм та спадковість

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

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

Давайте розглянемо приклад:

Приклад 4: Заміна методу

 from math import pi class Shape: def __init__(self, name): self.name = name def area(self): pass def fact(self): return "I am a two-dimensional shape." def __str__(self): return self.name class Square(Shape): def __init__(self, length): super().__init__("Square") self.length = length def area(self): return self.length**2 def fact(self): return "Squares have each angle equal to 90 degrees." class Circle(Shape): def __init__(self, radius): super().__init__("Circle") self.radius = radius def area(self): return pi*self.radius**2 a = Square(4) b = Circle(7) print(b) print(b.fact()) print(a.fact()) print(b.area()) 

Вихідні дані

Коло Я - двовимірна фігура. Квадрати мають кожен кут, що дорівнює 90 градусам. 153,93804002589985

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

Через поліморфізм інтерпретатор Python автоматично розпізнає, що fact()метод для об'єкта a(клас Square) замінений. Отже, він використовує той, який визначений у дочірньому класі.

З іншого боку, оскільки fact()метод для об'єкта b не перевизначений, він використовується з класу Parent Shape.

Поліморфізм у батьківських та дочірніх класах на Python

Примітка : Перевантаження методів , спосіб створення декількох методів з однаковим іменем, але різними аргументами, у Python неможливий.

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