Polymorfismi Pythonissa (esimerkkejä)

Tässä opetusohjelmassa opitaan polymorfismista, erityyppisistä polymorfismeista ja siitä, miten voimme toteuttaa ne Pythonissa esimerkkien avulla.

Mikä on polymorfismi?

Polymorfismin kirjaimellinen merkitys on esiintymisen edellytys eri muodoissa.

Polymorfismi on erittäin tärkeä käsite ohjelmoinnissa. Se viittaa yhden tyyppisen yksikön (menetelmän, operaattorin tai objektin) käyttöön edustamaan erilaisia ​​tyyppejä eri tilanteissa.

Otetaan esimerkki:

Esimerkki 1: Polymorfismi lisäksi operaattori

Tiedämme, että +operaattoria käytetään laajasti Python-ohjelmissa. Mutta sillä ei ole yhtä käyttöä.

Kokonaislukutietotyypeille +operaattoria käytetään suorittamaan aritmeettinen summaustoiminto.

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

Siksi yllä olevat ohjelman tuotokset 3.

Samoin merkkijonotietotyypeille +operaattoria käytetään ketjutuksen suorittamiseen.

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

Tämän seurauksena yllä oleva ohjelma tuottaa Python-ohjelmoinnin.

Tässä voimme nähdä, että yhtä operaattoria +on käytetty erilaisten toimintojen suorittamiseen erillisille tietotyypeille. Tämä on yksi yksinkertaisimmista polymorfismin esiintymisistä Pythonissa.

Funktion polymorfismi Pythonissa

Pythonissa on joitain toimintoja, jotka ovat yhteensopivia useiden tietotyyppien kanssa.

Yksi tällainen toiminto on len()toiminto. Se voi toimia monilla tietotyypeillä Pythonissa. Katsotaanpa joitain esimerkkejä funktion käyttötapauksista.

Esimerkki 2: Polymorfinen len () -funktio

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

Tuotos

 9 3 2 

Täällä voimme nähdä, että monet tietotyypit, kuten merkkijono, luettelo, dupleksi, joukko ja sanakirja, voivat toimia len()toiminnon kanssa. Voimme kuitenkin nähdä, että se palauttaa erityisiä tietoja tietyistä tietotyypeistä.

Polymorfismi len () -funktiossa Pythonissa

Luokan polymorfismi Pythonissa

Polymorfismi on erittäin tärkeä käsite olio-ohjelmoinnissa.

Lisätietoja OOP: sta Pythonissa on osoitteessa Python Object Oriented Programming

Voimme käyttää polymorfismin käsitettä luodessamme luokkamenetelmiä, sillä Python antaa eri luokille mahdollisuuden käyttää menetelmiä samalla nimellä.

Sitten voimme myöhemmin yleistää näiden menetelmien kutsumisen jättämällä huomioimatta objektin, jonka kanssa työskentelemme. Katsotaanpa esimerkkiä:

Esimerkki 3: Polymorfismi luokkamenetelmissä

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

Tuotos

Miau olen kissa. Nimeni on Kitty. Olen 2,5-vuotias. Meow Bark Olen koira. Nimeni on Fluffy. Olen 4-vuotias. Haukkua

Täällä olemme luoneet kaksi luokkaa Catja Dog. Niillä on samanlainen rakenne ja niillä on samat menetelmien nimet info()ja make_sound().

Huomaa kuitenkin, että emme ole luoneet yhteistä superluokkaa tai linkittäneet luokkia millään tavalla. Silloinkin voimme pakata nämä kaksi erilaista esinettä dupleksiin ja iteroida sen läpi käyttämällä yhteistä eläinmuuttujaa. Se on mahdollista polymorfismin takia.

Polymorfismi ja perintö

Muiden ohjelmointikielien tavoin myös Pythonin lapsiluokit perivät menetelmiä ja määritteitä vanhempaluokalta. Voimme määritellä uudelleen tietyt menetelmät ja määritteet nimenomaan lapsiluokan mukaisiksi , mikä tunnetaan nimellä Method Overriding .

Polymorfismi antaa meille mahdollisuuden käyttää näitä ohitettuja menetelmiä ja määritteitä, joilla on sama nimi kuin vanhempaluokalla.

Katsotaanpa esimerkkiä:

Esimerkki 4: Menetelmän ohittaminen

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

Tuotos

Ympyrä olen kaksiulotteinen muoto. Neliöiden kulmat ovat 90 astetta. 153,93804002589985

Tässä voimme nähdä, että menetelmiä __str__(), joita ei ole ohitettu lapsiluokissa, käytetään vanhempainluokasta.

Polymorfismin takia Python-tulkki tunnistaa automaattisesti, että fact()objektin menetelmä a(neliöluokka) ohitetaan. Joten se käyttää lapsiluokassa määriteltyä.

Toisaalta, koska fact()objektin b menetelmää ei ohiteta, sitä käytetään Parent Shape -luokasta.

Polymorfismi vanhempien ja lasten luokissa Pythonissa

Huomaa : Menetelmän ylikuormitus , tapa luoda useita menetelmiä samalla nimellä, mutta eri argumenteilla, ei ole mahdollista Pythonissa.

Mielenkiintoisia artikkeleita...