I denne vejledning lærer vi om polymorfisme, forskellige typer polymorfisme, og hvordan vi kan implementere dem i Python ved hjælp af eksempler.
Hvad er polymorfisme?
Den bogstavelige betydning af polymorfisme er betingelsen for forekomst i forskellige former.
Polymorfisme er et meget vigtigt koncept i programmering. Det refererer til brugen af en enkelt type enhed (metode, operatør eller objekt) til at repræsentere forskellige typer i forskellige scenarier.
Lad os tage et eksempel:
Eksempel 1: Polymorfisme derudover operator
Vi ved, at +
operatøren bruges i vid udstrækning i Python-programmer. Men det har ikke en enkelt brug.
For heltal datatyper +
bruges operator til at udføre aritmetisk additionsoperation.
num1 = 1 num2 = 2 print(num1+num2)
Derfor udsendes ovenstående programudgange 3.
Tilsvarende anvendes til strengdatatyper +
operatør til at udføre sammenkædning.
str1 = "Python" str2 = "Programming" print(str1+" "+str2)
Som et resultat udsender ovenstående program Python-programmering.
Her kan vi se, at en enkelt operatør +
er blevet brugt til at udføre forskellige operationer for forskellige datatyper. Dette er en af de mest enkle forekomster af polymorfisme i Python.
Funktion Polymorfisme i Python
Der er nogle funktioner i Python, som er kompatible til at køre med flere datatyper.
En sådan funktion er len()
funktionen. Det kan køre med mange datatyper i Python. Lad os se på nogle eksempler på brugstilfælde af funktionen.
Eksempel 2: Polymorf len () -funktion
print(len("Programiz")) print(len(("Python", "Java", "C"))) print(len(("Name": "John", "Address": "Nepal")))
Produktion
9 3 2
Her kan vi se, at mange datatyper som streng, liste, tuple, sæt og ordbog kan arbejde med len()
funktionen. Vi kan dog se, at det returnerer specifikke oplysninger om specifikke datatyper.

Klasse polymorfisme i Python
Polymorfisme er et meget vigtigt begreb inden for objektorienteret programmering.
For at lære mere om OOP i Python, besøg: Python Object-Oriented Programming
Vi kan bruge begrebet polymorfisme, mens vi opretter klassemetoder, da Python tillader forskellige klasser at have metoder med samme navn.
Vi kan derefter senere generalisere at kalde disse metoder ved at se bort fra det objekt, vi arbejder med. Lad os 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()
Produktion
Mia, jeg er en kat. Mit navn er Kitty. Jeg er 2,5 år gammel. Meow Bark Jeg er en hund. Mit navn er Fluffy. Jeg er 4 år gammel. Bark
Her har vi oprettet to klasser Cat
og Dog
. De deler en lignende struktur og har de samme metodenavne info()
og make_sound()
.
Bemærk dog, at vi ikke har oprettet en fælles superklasse eller knyttet linkene sammen på nogen måde. Selv da kan vi pakke disse to forskellige objekter i en tuple og gentage den ved hjælp af en fælles dyrevariabel. Det er muligt på grund af polymorfisme.
Polymorfisme og arv
Som i andre programmeringssprog arver også barneklasser i Python metoder og attributter fra overordnede klassen. Vi kan omdefinere bestemte metoder og attributter specifikt, så de passer til barneklassen, der er kendt som Method Overriding .
Polymorfisme giver os adgang til disse tilsidesatte metoder og attributter, der har samme navn som overordnet klasse.
Lad os se på et eksempel:
Eksempel 4: Overstyring af 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())
Produktion
Cirkel I er en todimensional form. Kvadrater har hver vinkel lig med 90 grader. 153.93804002589985
Her kan vi se, at de metoder __str__()
, som ikke er blevet tilsidesat i barneklasser, bruges fra den overordnede klasse.
På grund af polymorfisme genkender Python-tolken automatisk, at fact()
metoden til objekt a
(Square-klasse) er tilsidesat. Så det bruger den, der er defineret i barneklassen.
På den anden side, da fact()
metoden til objekt b ikke tilsidesættes, bruges den fra forældreformklassen.

Bemærk : Metodeoverbelastning , en måde at oprette flere metoder med samme navn men forskellige argumenter, er ikke mulig i Python.