Polimorfism în Python (cu exemple)

În acest tutorial, vom învăța despre polimorfism, diferite tipuri de polimorfism și cum le putem implementa în Python cu ajutorul unor exemple.

Ce este polimorfismul?

Înțelesul literal al polimorfismului este condiția apariției în diferite forme.

Polimorfismul este un concept foarte important în programare. Se referă la utilizarea unei entități de tip unic (metodă, operator sau obiect) pentru a reprezenta diferite tipuri în diferite scenarii.

Să luăm un exemplu:

Exemplul 1: Polimorfism în plus operator

Știm că +operatorul este utilizat pe scară largă în programele Python. Dar nu are o singură utilizare.

Pentru tipurile de date întregi, +operatorul este utilizat pentru a efectua operații de adăugare aritmetică.

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

Prin urmare, rezultatele programului de mai sus 3.

În mod similar, pentru tipurile de date șir, +operatorul este utilizat pentru a efectua concatenarea.

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

Ca rezultat, programul de mai sus generează programarea Python.

Aici, putem vedea că un singur operator +a fost folosit pentru a efectua operațiuni diferite pentru tipuri de date distincte. Aceasta este una dintre cele mai simple apariții de polimorfism în Python.

Funcția Polimorfism în Python

Există câteva funcții în Python care sunt compatibile pentru a rula cu mai multe tipuri de date.

O astfel de funcție este len()funcția. Poate rula cu multe tipuri de date în Python. Să vedem câteva exemple de cazuri de utilizare ale funcției.

Exemplul 2: funcția polimorfă len ()

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

Ieșire

 9 3 2 

Aici, putem vedea că multe tipuri de date precum șir, listă, tuplu, set și dicționar pot funcționa cu len()funcția. Cu toate acestea, putem vedea că returnează informații specifice despre anumite tipuri de date.

Polimorfism în funcția len () în Python

Polimorfism de clasă în Python

Polimorfismul este un concept foarte important în programarea orientată pe obiecte.

Pentru a afla mai multe despre OOP în Python, vizitați: Programare orientată pe obiecte Python

Putem folosi conceptul de polimorfism în timp ce creăm metode de clasă deoarece Python permite diferitelor clase să aibă metode cu același nume.

Ulterior, putem generaliza apelarea acestor metode, ignorând obiectul cu care lucrăm. Să vedem un exemplu:

Exemplul 3: Polimorfism în metode de clasă

 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() 

Ieșire

Miau sunt o pisică. Numele meu este Kitty. Am 2,5 ani. Meow Bark Sunt un câine. Numele meu este Fluffy. Am 4 ani. Latra

Aici, am creat două clase Catși Dog. Au o structură similară și au aceleași nume de metode info()și make_sound().

Cu toate acestea, observați că nu am creat o super-clasă comună și nici nu am legat clasele între ele. Chiar și atunci, putem împacheta aceste două obiecte diferite într-un tuplu și le putem itera folosind o variabilă animală comună. Este posibil datorită polimorfismului.

Polimorfism și moștenire

Ca și în alte limbaje de programare, clasele copil din Python moștenesc, de asemenea, metode și atribute din clasa părinte. Putem redefini anumite metode și atribute în mod specific pentru a se potrivi clasei copil, care este cunoscută sub numele de Metodă suprascriere .

Polimorfismul ne permite să accesăm aceste metode și atribute suprascrise care au același nume cu clasa părinte.

Să vedem un exemplu:

Exemplul 4: Metoda suprascriere

 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()) 

Ieșire

Cercul Sunt o formă bidimensională. Pătratele au fiecare unghi egal cu 90 de grade. 153.93804002589985

Aici, putem vedea că metode precum __str__(), care nu au fost anulate în clasele copil, sunt utilizate din clasa părinte.

Datorită polimorfismului, interpretul Python recunoaște automat că fact()metoda pentru obiect a(clasa Square) este suprascrisă. Deci, îl folosește pe cel definit în clasa copil.

Pe de altă parte, deoarece fact()metoda obiectului b nu este anulată, este utilizată din clasa Parent Shape.

Polimorfism în clasele de părinți și copii în Python

Notă : Supraîncărcarea metodelor , o modalitate de a crea mai multe metode cu același nume, dar cu argumente diferite, nu este posibilă în Python.

Articole interesante...