Polimorfizem v Pythonu (z primeri)

V tej vadnici bomo spoznali polimorfizem, različne vrste polimorfizmov in kako jih lahko uporabimo v Pythonu s pomočjo primerov.

Kaj je polimorfizem?

Dobesedni pomen polimorfizma je pogoj pojavljanja v različnih oblikah.

Polimorfizem je zelo pomemben pojem pri programiranju. Nanaša se na uporabo enotipske entitete (metode, operaterja ali predmeta) za zastopanje različnih tipov v različnih scenarijih.

Vzemimo primer:

Primer 1: Operater polimorfizma v seštevanju

Vemo, da se +operater pogosto uporablja v programih Python. Vendar nima ene same uporabe.

Pri celoštevilnih podatkovnih vrstah se +operater uporablja za izvajanje aritmetičnega seštevanja.

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

Zato zgornji program odda 3.

Podobno se za tipe podatkovnih nizov +operator uporablja za združevanje.

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

Kot rezultat, zgornji program izpiše programiranje Python.

Tu lahko vidimo, da je bil en operater +uporabljen za izvajanje različnih operacij za različne tipe podatkov. To je eden najpreprostejših pojavov polimorfizma v Pythonu.

Funkcija Polimorfizem v Pythonu

V Pythonu je nekaj funkcij, ki so združljive za izvajanje z več vrstami podatkov.

Ena takih funkcij je len()funkcija. V Pythonu lahko deluje z različnimi vrstami podatkov. Oglejmo si nekaj primerov uporabe funkcije.

Primer 2: Polimorfna funkcija len ()

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

Izhod

 9 3 2 

Tu lahko vidimo, da lahko s len()funkcijo deluje veliko vrst podatkov, kot so niz, seznam, nabor, nabor in slovar . Vendar lahko vidimo, da vrne posebne informacije o določenih vrstah podatkov.

Polimorfizem funkcije len () v Pythonu

Razred polimorfizem v Pythonu

Polimorfizem je zelo pomemben koncept v objektno usmerjenem programiranju.

Če želite izvedeti več o OOP v Pythonu, obiščite: Python objektno usmerjeno programiranje

Koncept polimorfizma lahko uporabimo pri ustvarjanju metod razredov, saj Python različnim razredom omogoča metode z istim imenom.

Nato lahko te metode pozneje posplošimo tako, da ne upoštevamo predmeta, s katerim delamo. Oglejmo si primer:

Primer 3: Polimorfizem v razrednih metodah

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

Izhod

Meow sem mačka. Moje ime je Kitty. Stara sem 2,5 leta. Meow Bark Sem pes. Moje ime je Fluffy. Stara sem 4 leta. Lubje

Tu smo ustvarili dva razreda Catin Dog. Imajo podobno strukturo in imajo enaka imena metod info()in make_sound().

Upoštevajte pa, da nismo ustvarili skupnega superrazreda ali na kakršen koli način povezali razredov. Že takrat lahko ta dva različna predmeta spakiramo v zavoj in skozi njega preletimo s skupno spremenljivko živali. Možno je zaradi polimorfizma.

Polimorfizem in dedovanje

Tako kot v drugih programskih jezikih tudi podrejeni razredi v Pythonu podedujejo metode in atribute iz nadrejenega razreda. Nekatere metode in atribute lahko ponovno definiramo posebej, da ustrezajo podrejenemu razredu, ki je znan kot Metoda preglasitve .

Polimorfizem nam omogoča dostop do teh razveljavljenih metod in atributov, ki imajo enako ime kot nadrejeni razred.

Oglejmo si primer:

Primer 4: Preglasitev metode

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

Izhod

Krog I je dvodimenzionalna oblika. Kvadrati imajo vsak kot enak 90 stopinj. 153,93804002589985

Tu lahko vidimo, da se metode, kot npr. __str__(), Ki niso bile razveljavljene v podrejenih razredih, uporabljajo iz nadrejenega razreda.

Zaradi polimorfizma tolmač Python samodejno prepozna, da je fact()metoda za objekt a(razred Square) razveljavljena. Torej, uporablja tisto, definirano v otroškem razredu.

Po drugi strani pa, ker fact()metoda za objekt b ni razveljavljena, se uporablja iz razreda Nadrejena oblika.

Polimorfizem v razredih staršev in otrok v Pythonu

Opomba : Preobremenitev metode , način za ustvarjanje več metod z istim imenom, vendar z različnimi argumenti, v Pythonu ni mogoča.

Zanimive Članki...