Polymorfism i Python (med exempel)

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.

Polymorfism i len () -funktion i Python

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 Catoch 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.

Polymorfism i föräldra- och barnklasser i Python

Obs : Metod Överbelastning , ett sätt att skapa flera metoder med samma namn men olika argument, är inte möjligt i Python.

Intressanta artiklar...