Полиморфизъм в Python (с примери)

В този урок ще научим за полиморфизма, различните видове полиморфизъм и как можем да ги приложим в Python с помощта на примери.

Какво е полиморфизъм?

Буквалното значение на полиморфизма е условието за поява в различни форми.

Полиморфизмът е много важно понятие в програмирането. То се отнася до използването на единичен тип обект (метод, оператор или обект) за представяне на различни типове в различни сценарии.

Да вземем пример:

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

Знаем, че +операторът се използва широко в програмите на Python. Но той няма нито едно използване.

За целочислени типове данни +операторът се използва за извършване на операция за аритметично събиране .

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

Следователно горната програма извежда 3.

По подобен начин за низовите типове данни +операторът се използва за извършване на конкатенация.

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

В резултат на това горната програма извежда Python Programming.

Тук можем да видим, че един оператор +е бил използван за извършване на различни операции за различни типове данни. Това е едно от най-простите прояви на полиморфизъм в 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

Полиморфизмът е много важно понятие в обектно-ориентираното програмиране.

За да научите повече за OOP в 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 години съм. Meow Bark Аз съм куче. Казвам се Пухкав. На 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()) 

Изход

Кръг I съм двуизмерна форма. Квадратите имат всеки ъгъл равен на 90 градуса. 153,93804002589985

Тук можем да видим, че методите като __str__(), които не са заменени в дъщерните класове, се използват от родителския клас.

Поради полиморфизма, интерпретаторът на Python автоматично разпознава, че fact()методът за обект a(клас Square) е заменен. Така че, той използва този, дефиниран в дъщерния клас.

От друга страна, тъй като fact()методът за обект b не е заменен, той се използва от класа Parent Shape.

Полиморфизъм в родителски и детски класове в Python

Забележка : Претоварването на метода , начин за създаване на множество методи с едно и също име, но различни аргументи, не е възможно в Python.

Интересни статии...