Polimorfizam u Pythonu (s primjerima)

U ovom uputstvu naučit ćemo o polimorfizmu, različitim vrstama polimorfizma i kako ih možemo primijeniti u Pythonu uz pomoć primjera.

Što je polimorfizam?

Doslovno značenje polimorfizma uvjet je pojave u različitim oblicima.

Polimorfizam je vrlo važan pojam u programiranju. Odnosi se na upotrebu jednog tipa entiteta (metode, operatora ili objekta) za predstavljanje različitih tipova u različitim scenarijima.

Uzmimo primjer:

Primjer 1: Operator polimorfizma sabiranja

Znamo da se +operator često koristi u programima Python. Ali, nema niti jednu upotrebu.

Za cjelobrojne tipove podataka +operator se koristi za izvođenje aritmetičkog zbrajanja.

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

Dakle, gornji program daje rezultate 3.

Slično tome, za vrste podataka niza, +operator se koristi za izvođenje spajanja.

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

Kao rezultat, gornji program daje Python programiranje.

Ovdje možemo vidjeti da je jedan operator +korišten za obavljanje različitih operacija za različite tipove podataka. Ovo je jedna od najjednostavnijih pojava polimorfizma u Pythonu.

Polimorfizam funkcije u Pythonu

U Pythonu postoje neke funkcije koje su kompatibilne za pokretanje s više vrsta podataka.

Jedna od takvih funkcija je len()funkcija. Može se izvoditi s mnogim vrstama podataka u Pythonu. Pogledajmo neke primjere slučajeva upotrebe funkcije.

Primjer 2: Polimorfna funkcija lena ()

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

Izlaz

 9 3 2 

Ovdje možemo vidjeti da mnoge vrste podataka poput niza, popisa, korice, skupa i rječnika mogu raditi s len()funkcijom. Međutim, možemo vidjeti da vraća specifične informacije o određenim vrstama podataka.

Polimorfizam u funkciji len () u Pythonu

Razredni polimorfizam u Pythonu

Polimorfizam je vrlo važan pojam u objektno orijentiranom programiranju.

Da biste saznali više o OOP-u u Pythonu, posjetite: Python objektno orijentirano programiranje

Možemo se koristiti konceptom polimorfizma dok stvaramo metode klasa jer Python omogućuje da različite klase imaju metode s istim imenom.

Tada možemo kasnije generalizirati pozivanje ovih metoda zanemarujući objekt s kojim radimo. Pogledajmo primjer:

Primjer 3: Polimorfizam u razrednim metodama

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

Izlaz

Mijau ja sam mačka. Zovem se Kitty. Imam 2,5 godine. Meow Bark Ja sam pas. Zovem se Fluffy. Imam 4 godine. Kora

Ovdje smo stvorili dva razreda Cati Dog. Oni dijele sličnu strukturu i imaju ista imena metoda info()i make_sound().

Međutim, primijetite da nismo stvorili zajedničku superklasu ili na bilo koji način povezali klase. Čak i tada, možemo spakirati ova dva različita predmeta u skup i iterirati kroz njih koristeći zajedničku životinjsku varijablu. Moguće je zbog polimorfizma.

Polimorfizam i nasljeđivanje

Like in other programming languages, the child classes in Python also inherit methods and attributes from the parent class. We can redefine certain methods and attributes specifically to fit the child class, which is known as Method Overriding.

Polymorphism allows us to access these overridden methods and attributes that have the same name as the parent class.

Let's look at an example:

Example 4: Method Overriding

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

Output

 Circle I am a two-dimensional shape. Squares have each angle equal to 90 degrees. 153.93804002589985 

Here, we can see that the methods such as __str__(), which have not been overridden in the child classes, are used from the parent class.

Zbog polimorfizma, Python tumač automatski prepoznaje da je fact()metoda za objekt a(klasa Square) nadjačana. Dakle, koristi onu koja je definirana u podređenom razredu.

S druge strane, budući da fact()metoda za objekt b nije nadjačana, koristi se iz klase Nadređeni oblik.

Polimorfizam u razredima roditelja i djeteta u Pythonu

Napomena : Preopterećenje metoda , način stvaranja više metoda s istim imenom, ali različitim argumentima, u Pythonu nije moguće.

Zanimljivi članci...