Polymorfizmus v Pythone (s príkladmi)

V tomto tutoriáli sa dozvieme o polymorfizme, rôznych druhoch polymorfizmu a o tom, ako ich môžeme pomocou príkladov implementovať v Pythone.

Čo je to polymorfizmus?

Doslovný význam polymorfizmu je podmienka výskytu v rôznych formách.

Polymorfizmus je veľmi dôležitý pojem v programovaní. Vzťahuje sa na použitie jediného typu entity (metóda, operátor alebo objekt) na reprezentáciu rôznych typov v rôznych scenároch.

Uveďme si príklad:

Príklad 1: Polymorfizmus v operátore sčítania

Vieme, že +operátor sa vo veľkej miere používa v programoch Python. Ale nemá jediné použitie.

Pre celočíselné dátové typy sa +operátor používa na vykonávanie operácie aritmetického sčítania.

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

Vyššie uvedený program teda výstupy 3.

Podobne pre dátové typy reťazcov sa +operátor používa na vykonávanie zreťazenia.

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

Výsledkom je, že vyššie uvedený program vydáva programovanie v jazyku Python.

Tu vidíme, že +na vykonávanie rôznych operácií pre odlišné dátové typy sa použil jeden operátor . Toto je jeden z najjednoduchších výskytov polymorfizmu v Pythone.

Funkčný polymorfizmus v Pythone

V Pythone sú niektoré funkcie, ktoré sú kompatibilné na spustenie s viacerými dátovými typmi.

Jednou z takýchto funkcií je len()funkcia. Môže bežať s mnohými dátovými typmi v Pythone. Pozrime sa na niekoľko príkladov použitia tejto funkcie.

Príklad 2: Polymorfná funkcia len ()

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

Výkon

 9 3 2 

Tu vidíme, že s touto len()funkciou môže pracovať veľa dátových typov, ako sú reťazec, zoznam, n-tica, množina a slovník . Vidíme však, že vracia konkrétne informácie o konkrétnych dátových typoch.

Polymorfizmus vo funkcii len () v Pythone

Polymorfizmus triedy v Pythone

Polymorfizmus je veľmi dôležitý pojem v objektovo orientovanom programovaní.

Ak sa chcete dozvedieť viac o OOP v Pythone, navštívte: Objektovo orientované programovanie v jazyku Python

Koncept polymorfizmu môžeme použiť pri vytváraní metód tried, pretože Python umožňuje rôznym triedam mať metódy s rovnakým názvom.

Potom môžeme zovšeobecniť volanie týchto metód ignorovaním objektu, s ktorým pracujeme. Pozrime sa na príklad:

Príklad 3: Polymorfizmus v triedových metódach

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

Výkon

Mňau som mačka. Volám sa Kitty. Mam 2,5 roka. Mňau Bark Som pes. Moje meno je Fluffy. Mam 4 roky. Štekať

Tu sme vytvorili dve triedy Cata Dog. Zdieľajú podobnú štruktúru a majú rovnaké názvy metód info()a make_sound().

Všimnite si však, že sme nevytvorili spoločnú nadtriedu ani sme triedy nijako neprepojili. Aj potom môžeme tieto dva rôzne objekty zbaliť do n-tice a iterovať cez ňu pomocou bežnej živočíšnej premennej. Je to možné kvôli polymorfizmu.

Polymorfizmus a dedičnosť

Rovnako ako v iných programovacích jazykoch, aj podradené triedy v Pythone dedia metódy a atribúty z rodičovskej triedy. Môžeme predefinovať určité metódy a atribúty špeciálne tak, aby vyhovovali podradenej triede, ktorá je známa ako Prepísanie metódy .

Polymorfizmus nám umožňuje prístup k týmto prepísaným metódam a atribútom, ktoré majú rovnaký názov ako nadradená trieda.

Pozrime sa na príklad:

Príklad 4: Prepísanie metódy

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

Výkon

Kruh som dvojrozmerný tvar. Štvorce majú každý uhol rovný 90 stupňom. 153,93804002589985

Tu vidíme, že metódy ako napríklad __str__(), ktoré neboli prepísané v podradených triedach, sa používajú z nadradenej triedy.

Kvôli polymorfizmu tlmočník Pythonu automaticky rozpozná, že fact()metóda pre objekt a(trieda Square) je prepísaná. Používa teda ten, ktorý je definovaný v podradenej triede.

Na druhej strane, pretože fact()metóda pre objekt b nie je prepísaná, používa sa z triedy Parent Shape.

Polymorfizmus v triedach rodičov a detí v Pythone

Poznámka : Preťaženie metód , spôsob vytvárania viacerých metód s rovnakým názvom, ale rôznymi argumentmi, nie je v Pythone možný.

Zaujímavé články...