Pytonorm

Polymorfism i Python

Polymorfism i Python
Polymorfism betyder ”många former.”Polymorfism ett viktigt inslag i Object-Oriented Programming (OOP).  När samma metod förklaras flera gånger, för flera ändamål och i olika klasser, kallas det polymorfism. Ett annat inslag i OOP är arv, genom vilken barnklassen kan skapas genom att ärva föräldraklassen. Ibland kräver det att programmeraren förklarar en metod med samma namn i både föräldrar och barnklasser för olika ändamål. Denna typ av uppgift kan också genomföras med polymorfism. Denna artikel förklarar hur polymorfism kan definieras i objektorienterad programmering (OOP).

Exempel 1: Polymorfism med funktioner och objekt

Följande manus visar användningen av polymorfism mellan två olika klasser. En funktion används för att skapa objektet för dessa klasser. Värdet på den variabel som heter Färg initialiseras i __i det__() metod för både 'Papegoja' och den 'Struts'klasser vid tidpunkten för skapandet av objekt. De funktioner() Metoden definieras i båda klasserna, men resultatet för metoden för varje klass är lite annorlunda. De Create_Object () funktionen används för att skapa ett objekt av klassen. Denna funktion körs två gånger för att skapa objektet i 'Papegoja'klass och i'Struts' klass. Var och en kommer att anropa funktionsmetoden () för båda klasserna och skriva ut utdata.

#!/ usr / bin / env python3
# Definiera papegojaklassen
klass papegoja ():
def __init __ (själv, färg):
själv.färg = färg
def-funktioner (själv):
tryck ("Papegojans färg är% s"% själv.Färg)
tryck ("Papegojan kan flyga")
# Definiera strutsklassen
klass Struts ():
def __init __ (själv, färg):
själv.färg = färg
def funktioner (själv):
tryck ("Strutsens färg är% s"% själv.Färg)
tryck ("Struts kan inte flyga")
# Definiera funktionen för att anropa klassens metod
def Create_Object (Object):
Objekt.funktioner()
# Skapa objekt av papegojaklass
Create_Object (papegoja ('grön'))
# Skapa objekt av strutsklassen
Create_Object (struts ('svartvitt'))

Produktion

Följande utdata visar att objektet för 'Papegoja'klass skapas med'Grön' som den Färg värde. Funktionen skriver ut utdata genom att anropa funktioner() metod för 'Papegoja' klass. Därefter är föremålet för 'Struts'klass skapas med'Svartvitt' som den Färg värde. Funktionen skriver ut utdata genom att anropa funktioner() metod för 'Struts' klass.

Exempel 2: Polymorfism i icke-relaterade klassmetoder

Som i föregående exempel visar följande skript användningen av polymorfism i två olika klasser, men ingen anpassad funktion används för att deklarera objektet. De __i det__() metod för både 'Chef'och'Kontorist'klasser initialiserar de nödvändiga variablerna. Polymorfism implementeras här genom att skapa post_details () och lön() metoder i båda klasserna. Innehållet i dessa metoder är olika för var och en av dessa klasser. Därefter skapas objektvariablerna för båda klasserna och upprepas av a för en runda. I varje iteration, post_details () och lön() metoder kallas för att skriva ut utdata.

#!/ usr / bin / env python3
# Definiera en klass som heter Manager
klasschef:
def __init __ (själv, namn, avdelning):
själv.namn = namn
själv.post = 'Manager'
själv.avdelning = avdelning
# Definiera funktion för att ställa in detaljer
def post_details (själv):
om själv.avdelning.övre () == 'HR':
själv.grundläggande = 30000
annan:
själv.grundläggande = 25000
själv.houseRent = 10000
själv.transport = 5000
skriva ut ("Inlägget för% s är% s"% (själv.namn, själv.posta))
# Definiera funktion för att beräkna lön
def lön (själv):
lön = själv.grundläggande + jag.houseRent + själv.transport
returlön
# Definiera en klass som heter Clerk
klass kontorist:
def __init __ (själv, namn):
själv.namn = namn
själv.post = 'Clerk'
# Definiera funktion för att ställa in detaljer
def post_details (själv):
själv.grundläggande = 10000
själv.transport = 2000
skriva ut ("Inlägget för% s är% s"% (själv.namn, själv.posta))
# Definiera funktion för att beräkna lön
def lön (själv):
lön = själv.grundläggande + jag.transport
returlön
# Skapa objekt för klasserna
manager = Manager ("Kabir", "hr")
clerk = Clerk ("Robin")
# Ring samma funktioner från olika klasser
för obj i (chef, kontorist):
obj.post_details ()
tryck ("Lönen är", obj.lön())

Produktion

Följande utdata visar att objektet för 'Krubbaklass används i den första iterationen av för slinga och chefens lön skrivs ut efter beräkning. Syftet med 'Kontoristklass används i den andra iterationen av för loop och kontoristens lön skrivs ut efter beräkning.

Exempel 3: Polymorfism i relaterade klassmetoder

Följande manus visar användningen av polymorfism mellan två barnklasser. Här, båda 'Triangel'och'Cirkel'är barnklasserna i den överordnade klassen som heter'Geometrisk_form.'Enligt arvet kan barnklassen få tillgång till alla variabler och metoder i moderklassen. De __i det__() metod för 'Geometrisk_form'class används i båda underklasserna för att initialisera variabeln namn genom att använda super() metod. Värdena för bas och höjd av 'Triangel'klass kommer att initieras vid tidpunkten för skapandet av objekt. På samma sätt är radievärdena för 'Cirkel'klass kommer att initieras vid tidpunkten för skapandet av objekt. Formeln för att beräkna ytan av en triangel är ½ × bas × höjd, som implementeras i område() metod för 'Triangel' klass. Formeln för beräkning av en cirkels area är 3.14 × (radie)2, som implementeras i område() metod för 'Cirkel' klass. Namnen på båda metoderna är desamma här, men syftet är annorlunda. Därefter tas ett strängvärde från användaren för att skapa ett objekt och för att anropa metoden baserat på värdet. Om användaren skriver 'triangel', då ett objekt av 'Triangel' klass skapas, och om användaren skriver 'cirkel', så kommer ett objekt till 'Cirkel' klass kommer att skapas. Om användaren skriver text utan 'triangel' eller 'cirkel' skapas inget objekt och ett felmeddelande kommer att skrivas ut.

#!/ usr / bin / env python3
# Definiera föräldraklassen
klass Geometrisk_form:
def __init __ (själv, namn):
själv.namn = namn
# Definiera barnklass för beräkning av triangelns yta
klass triangel (geometrisk_form):
def __init __ (själv, namn, bas, höjd):
super().__init __ (namn)
själv.bas = bas
själv.höjd = höjd
def-område (själv):
resultat = 0.5 * själv.bas * själv.höjd
skriv ut ("\ nOmrådet för% s =% 5.2f "% (själv.namn, resultat))
# Definiera barnklass för att beräkna cirkelområdet
klasscirkel (geometrisk_form):
def __init __ (själv, namn, radie):
super().__init __ (namn)
själv.radie = radie
def-område (själv):
resultat = 3.14 * själv.radie ** 2
skriv ut ("\ nOmrådet för% s =% 5.2f "% (själv.namn, resultat))
cal_area = input ("Vilket område vill du beräkna? triangel / cirkel \ n ")
om cal_area.upper () == 'TRIANGLE':
base = float (input ('Enter the base of the triangel:'))
höjd = float (input ('Ange triangelns höjd:'))
obj = Triangle ('Triangle', bas, höjd)
obj.område()
elif cal_area.upper () == 'CIRCLE':
radius = float (input ('Ange cirkeln:')))
obj = Cirkel ('Cirkel', radie)
obj.område()
annan:
skriva ut ("Fel inmatning")

Produktion

I följande utdata körs skriptet två gånger. Första gången, triangel tas som ingång och objektet initialiseras av tre värden, 'Triangel'', bas, och höjd. Dessa värden används sedan för att beräkna triangelns yta och utskriften kommer att skrivas ut. Andra gången, cirkel tas som inmatning och objektet initialiseras med två värden, 'Cirkel'och radie. Dessa värden används sedan för att beräkna cirkelns yta och utskriften kommer att skrivas ut.

Slutsats

Denna artikel använde enkla exempel för att förklara tre olika användningar av polymorfism i Python. Begreppet polymorfism kan också tillämpas utan klasser, en metod som inte förklaras här. Den här artikeln hjälpte läsarna att lära sig mer om hur man tillämpar polymorfism i objektorienterad Python-programmering.

Hur man utvecklar ett spel på Linux
För ett decennium sedan skulle inte många Linux-användare förutsäga att deras favoritoperativsystem en dag skulle vara en populär spelplattform för ko...
Portar med öppen källkod för kommersiella spelmotorer
Gratis, öppen källkod och plattformsmekaniska rekreationer kan användas för att spela gamla såväl som några av de ganska senaste speltitlarna. I den h...
Bästa kommandoradsspel för Linux
Kommandoraden är inte bara din största allierade när du använder Linux, det kan också vara källan till underhållning eftersom du kan använda den för a...