I den här handledningen lär vi oss om polymorfism, olika typer av polymorfism och hur vi kan implementera dem i Python med hjälp av exempel.
Vad är polymorfism?
Den bokstavliga betydelsen av polymorfism är villkoret för förekomst i olika former.
Polymorfism är ett mycket viktigt begrepp vid programmering. Det hänvisar till användningen av en enhetstyp (metod, operatör eller objekt) för att representera olika typer i olika scenarier.
Låt oss ta ett exempel:
Exempel 1: Polymorfism dessutom operatör
Vi vet att +
operatören används i stor utsträckning i Python-program. Men det har inte en enda användning.
För heltal datatyper används +
operator för att utföra aritmetisk additionsoperation.
num1 = 1 num2 = 2 print(num1+num2)
Följaktligen ovanstående programutgångar 3.
På samma sätt används för strängdatatyper +
operatör för att utföra sammanfogning.
str1 = "Python" str2 = "Programming" print(str1+" "+str2)
Som ett resultat matar ovanstående program ut Python-programmering.
Här kan vi se att en enda operatör +
har använts för att utföra olika operationer för olika datatyper. Detta är en av de enklaste förekomsten av polymorfism i Python.
Funktion Polymorfism i Python
Det finns några funktioner i Python som är kompatibla för att köras med flera datatyper.
En sådan funktion är len()
funktionen. Det kan köras med många datatyper i Python. Låt oss titta på några exempel på användningsfall av funktionen.
Exempel 2: Polymorf len () -funktion
print(len("Programiz")) print(len(("Python", "Java", "C"))) print(len(("Name": "John", "Address": "Nepal")))
Produktion
9 3 2
Här kan vi se att många datatyper som sträng, lista, tupel, uppsättning och ordlista kan fungera med len()
funktionen. Vi kan dock se att den returnerar specifik information om specifika datatyper.
![](https://cdn.wiki-base.com/1025615/polymorphism_in_pythonwith_examples.png.webp)
Klass polymorfism i Python
Polymorfism är ett mycket viktigt begrepp inom objektorienterad programmering.
För att lära dig mer om OOP i Python, besök: Python Object-Oriented Programming
Vi kan använda begreppet polymorfism när vi skapar klassmetoder eftersom Python tillåter olika klasser att ha metoder med samma namn.
Vi kan sedan senare generalisera att kalla dessa metoder genom att bortse från objektet vi arbetar med. Låt oss titta på ett exempel:
Exempel 3: Polymorfism i klassmetoder
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
Meow jag är en katt. Jag heter Kitty. Jag är 2,5 år gammal. Meow Bark Jag är en hund. Jag heter Fluffy. Jag är 4 år gammal. Bark
Här har vi skapat två klasser Cat
och Dog
. De delar en liknande struktur och har samma metodnamn info()
och make_sound()
.
Lägg dock märke till att vi inte har skapat en gemensam superklass eller kopplat klasserna på något sätt. Även då kan vi packa dessa två olika objekt i en tuple och itera igenom den med hjälp av en gemensam djurvariabel. Det är möjligt på grund av polymorfism.
Polymorfism och arv
Som i andra programmeringsspråk ärver barnklasserna i Python också metoder och attribut från föräldraklassen. Vi kan omdefiniera vissa metoder och attribut specifikt för att passa barnklassen, som kallas Method Overriding .
Polymorfism tillåter oss att komma åt dessa åsidosatta metoder och attribut som har samma namn som föräldraklassen.
Låt oss titta på ett exempel:
Exempel 4: Metodöverskridande
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 Jag är en tvådimensionell form. Kvadrater har varje vinkel lika med 90 grader. 153.93804002589985
Här kan vi se att metoder som __str__()
, som inte har åsidosatts i barnklasserna, används från föräldraklassen.
På grund av polymorfism känner Python-tolken automatiskt igen att fact()
metoden för objekt a
(kvadratklass) åsidosätts. Så den använder den som definieras i barnklassen.
Å andra sidan, eftersom fact()
metoden för objekt b inte åsidosätts, används den från föräldraklassen.
![](https://cdn.wiki-base.com/1025615/polymorphism_in_pythonwith_examples_2.png.webp)
Obs : Metod Överbelastning , ett sätt att skapa flera metoder med samma namn men olika argument, är inte möjligt i Python.