У цьому підручнику ми дізнаємося про поліморфізм, різні типи поліморфізму та як ми можемо реалізувати їх у 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()
функцією. Однак ми бачимо, що він повертає конкретну інформацію про конкретні типи даних.
![](https://cdn.wiki-base.com/1025615/polymorphism_in_pythonwith_examples.png.webp)
Поліморфізм класу в 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.
![](https://cdn.wiki-base.com/1025615/polymorphism_in_pythonwith_examples_2.png.webp)
Примітка : Перевантаження методів , спосіб створення декількох методів з однаковим іменем, але різними аргументами, у Python неможливий.