Polümorfism Pythonis (koos näidetega)

Selles õpetuses õpime tundma polümorfismi, erinevat tüüpi polümorfismi ja seda, kuidas neid näidete abil Pythonis rakendada.

Mis on polümorfism?

Polümorfismi sõnasõnaline tähendus on esinemise tingimus erinevates vormides.

Polümorfism on programmeerimisel väga oluline mõiste. See viitab ühetüübilise üksuse (meetodi, operaatori või objekti) kasutamisele eri tüüpide esindamiseks erinevates stsenaariumides.

Võtame näite:

Näide 1: polümorfism lisaks operaatorile

Me teame, et +operaatorit kasutatakse Pythoni programmides palju. Kuid sellel pole ühte kasutust.

Täisarvu andmetüüpide puhul +kasutatakse operaatorit aritmeetilise liitmise toimingu tegemiseks.

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

Seega ülaltoodud programmi väljundid 3.

Sarnaselt kasutatakse stringide andmetüüpide puhul +liitjat operaatorit.

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

Selle tulemusena väljastab ülaltoodud programm Pythoni programmeerimise.

Siin näeme, et +erinevate andmetüüpide jaoks erinevate toimingute tegemiseks on kasutatud ühte operaatorit . See on Pythoni üks lihtsamaid polümorfismi esinemisi.

Funktsioon Polümorfism Pythonis

Pythonis on mõned funktsioonid, mis sobivad mitut tüüpi andmetega töötamiseks.

Üks selline funktsioon on len()funktsioon. Seda saab Pythonis käitada paljude andmetüüpidega. Vaatame funktsiooni mõningaid näiteid.

Näide 2: Polümorfne len () funktsioon

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

Väljund

 9 3 2 

Siin näeme, et paljud andmetüübid, nagu string, loend, dupleks, komplekt ja sõnastik, võivad len()funktsiooniga töötada . Kuid näeme, et see tagastab konkreetse teabe konkreetsete andmetüüpide kohta.

Polymorphism len () funktsioonis Pythonis

Klasside polümorfism Pythonis

Polümorfism on objektorienteeritud programmeerimisel väga oluline mõiste.

OOP-i kohta Pythonis lisateabe saamiseks külastage veebisaiti: Pythoni objektorienteeritud programmeerimine

Klassimeetodite loomisel saame kasutada polümorfismi mõistet, kuna Python võimaldab erinevatel klassidel sama nimega meetodeid kasutada.

Seejärel saame hiljem üldistada nende meetodite nimetamise, jättes arvestamata objekti, millega töötame. Vaatame näidet:

Näide 3: Polümorfism klassimeetodites

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

Väljund

Mjäu, ma olen kass. Minu nimi on Kitty. Olen 2,5-aastane. Mjäu koor olen koer. Minu nimi on Fluffy. Olen 4-aastane. Koor

Siin oleme loonud kaks klassi Catja Dog. Neil on sarnane struktuur ja neil on samad meetodinimed info()ja make_sound().

Pange tähele, et me ei ole loonud ühist superklass ega sidunud klasse kuidagi kokku. Isegi siis saame need kaks erinevat objekti pakkida kahekesi ja ühise loomamuutuja abil selle kaudu itereerida. See on võimalik polümorfismi tõttu.

Polümorfism ja pärand

Nagu teistes programmeerimiskeeltes, pärivad ka Pythoni lapseklassid meetodid ja atribuudid vanemklassist. Saame teatud meetodid ja atribuudid spetsiaalselt ümber määratleda, et need sobiksid lasteklassiga, mida tuntakse kui meetodi ülimuslikkust .

Polümorfism võimaldab meil pääseda juurde nendele alistatud meetoditele ja atribuutidele, millel on vanemklassiga sama nimi.

Vaatame näidet:

Näide 4: meetodi ülimuslikkus

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

Väljund

Ring olen kahemõõtmeline kuju. Ruutude iga nurk on 90 kraadi. 153,93804002589985

Siit näeme, et selliseid meetodeid nagu __str__()pole lasteklassides alistatud, kasutatakse vanemateklassist.

Polümorfismi tõttu tunneb Pythoni tõlk automaatselt ära, et fact()objekti a(ruutklassi) meetod on alistatud. Niisiis, see kasutab lasteklassis määratut.

Teiselt poolt, kuna fact()objekti b meetodit ei tühistata, kasutatakse seda klassi Parent Shape.

Polümorfism vanemate ja laste klassides Pythonis

Märkus . Meetodite ülekoormamine - viis sama nime, kuid erinevate argumentidega mitme meetodi loomiseks - pole Pythonis võimalik.

Huvitavad Artiklid...