Polymorfisme i Python (med eksempler)

I denne veiledningen vil vi lære om polymorfisme, forskjellige typer polymorfisme, og hvordan vi kan implementere dem i Python ved hjelp av eksempler.

Hva er polymorfisme?

Den bokstavelige betydningen av polymorfisme er tilstanden til forekomst i forskjellige former.

Polymorfisme er et veldig viktig begrep i programmering. Det refererer til bruken av en enkelt type enhet (metode, operatør eller objekt) for å representere forskjellige typer i forskjellige scenarier.

La oss ta et eksempel:

Eksempel 1: Polymorfisme i tillegg operatør

Vi vet at +operatøren brukes mye i Python-programmer. Men det har ikke en eneste bruk.

For heltal datatyper +brukes operator til å utføre aritmetisk tilleggsoperasjon.

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

Derfor viser de ovennevnte programutgangene 3.

Tilsvarende +brukes for strengdatatyper operatør til å utføre sammenkobling.

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

Som et resultat gir ovennevnte program Python-programmering.

Her kan vi se at en enkelt operatør +har blitt brukt til å utføre forskjellige operasjoner for forskjellige datatyper. Dette er en av de mest enkle forekomstene av polymorfisme i Python.

Funksjon Polymorfisme i Python

Det er noen funksjoner i Python som er kompatible for å kjøre med flere datatyper.

En slik funksjon er len()funksjonen. Det kan kjøres med mange datatyper i Python. La oss se på noen eksempler på brukstilfeller av funksjonen.

Eksempel 2: Polymorf len () -funksjon

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

Produksjon

 9 3 2 

Her kan vi se at mange datatyper som streng, liste, tuple, sett og ordbok kan fungere med len()funksjonen. Vi kan imidlertid se at den returnerer spesifikk informasjon om spesifikke datatyper.

Polymorfisme i len () -funksjon i Python

Klasse polymorfisme i Python

Polymorfisme er et veldig viktig konsept i objektorientert programmering.

For å lære mer om OOP i Python, besøk: Python Object-Oriented Programming

Vi kan bruke begrepet polymorfisme mens vi lager klassemetoder, ettersom Python lar forskjellige klasser ha metoder med samme navn.

Vi kan deretter senere generalisere å kalle disse metodene ved å se bort fra objektet vi jobber med. La oss se på et eksempel:

Eksempel 3: Polymorfisme i klassemetoder

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

Produksjon

Meow jeg er en katt. Jeg heter Kitty. Jeg er 2,5 år gammel. Meow Bark Jeg er en hund. Jeg heter Fluffy. Jeg er 4 år gammel. Bark

Her har vi laget to klasser Catog Dog. De har en lignende struktur og har samme metodenavn info()og make_sound().

Merk imidlertid at vi ikke har opprettet en felles superklasse eller koblet klassene sammen på noen måte. Selv da kan vi pakke disse to forskjellige objektene i en tuple og gjentas gjennom den ved hjelp av en felles dyrevariabel. Det er mulig på grunn av polymorfisme.

Polymorfisme og arv

Som i andre programmeringsspråk arver også barneklassene i Python metoder og attributter fra foreldreklassen. Vi kan omdefinere visse metoder og attributter spesifikt for å passe barneklassen, som er kjent som Method Overriding .

Polymorfisme gir oss tilgang til disse overstyrte metodene og attributtene som har samme navn som overordnet klasse.

La oss se på et eksempel:

Eksempel 4: Overstyring av metoden

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

Produksjon

Sirkel jeg er en todimensjonal form. Kvadrater har hver vinkel lik 90 grader. 153.93804002589985

Her kan vi se at metodene som __str__(), som ikke har blitt overstyrt i barneklassene, brukes fra foreldreklassen.

På grunn av polymorfisme anerkjenner Python-tolken automatisk at fact()metoden for objekt a(Square-klasse) overstyres. Så den bruker den som er definert i barneklassen.

På den annen side, siden fact()metoden for objekt b ikke blir tilsidesatt, brukes den fra foreldreformklassen.

Polymorfisme i foreldre- og barneklasser i Python

Merk : Metodeoverbelastning , en måte å lage flere metoder med samme navn men forskjellige argumenter, er ikke mulig i Python.

Interessante artikler...