Python

Polymorfisme i Python

Polymorfisme i Python
Polymorfisme betyr “mange former.”Polymorfisme er et viktig trekk ved objektorientert programmering (OOP).  Når den samme metoden blir erklært flere ganger, for flere formål og i forskjellige klasser, kalles den polymorfisme. En annen funksjon i OOP er arv, gjennom hvilken barneklassen kan opprettes ved å arve foreldreklassens funksjoner. Noen ganger krever det at programmereren erklærer en metode med samme navn i både foreldre- og barneklassen for forskjellige formål. Denne typen oppgaver kan også implementeres ved hjelp av polymorfisme. Denne artikkelen forklarer hvordan polymorfisme kan defineres i objektorientert programmering (OOP).

Eksempel 1: Polymorfisme med funksjoner og gjenstander

Følgende skript viser bruken av polymorfisme mellom to forskjellige klasser. En funksjon brukes til å lage objektet til disse klassene. Verdien av variabelen som heter farge er initialisert i __i det__() metoden for både 'Papegøye' og 'Struts'klasser på tidspunktet for oppretting av objekt. De funksjoner() metoden er definert i begge klasser, men resultatet av metoden for hver klasse er litt annerledes. De Create_Object () funksjonen brukes til å lage et objekt av klassen. Denne funksjonen utføres to ganger for å lage objektet i 'Papegøye'klasse og i'Strutsklasse. Hver vil kalle funksjonene () for begge klasser og skrive ut utdataene.

#!/ usr / bin / env python3
# Definer papegøyeklassen
klasse Papegøye ():
def __init __ (selv, farge):
selv-.farge = farge
def funksjoner (selv):
utskrift ("Fargen på papegøyen er% s"% selv.farge)
print ("Papegøyen kan fly")
# Definer strutseklassen
klasse struts ():
def __init __ (selv, farge):
selv-.farge = farge
def funksjoner (selv):
utskrift ("Strutsens farge er% s"% selv.farge)
utskrift ("Strutsen kan ikke fly")
# Definer funksjonen for å kalle metoden til klassen
def Create_Object (Object):
Gjenstand.funksjoner()
# Lag objekt av papegøyeklassen
Create_Object (Papegøye ('Grønn'))
# Lag objekt av strutseklassen
Create_Object (struts ('svart og hvitt'))

Produksjon

Følgende utgang viser at objektet til 'Papegøye'klasse er opprettet med'Grønnsom den farge verdi. Funksjonen skriver ut utdata ved å ringe funksjoner() metoden for 'Papegøyeklasse. Neste, gjenstanden for 'Struts'klasse er opprettet med'Svart og hvitsom den farge verdi. Funksjonen skriver ut utdata ved å ringe funksjoner() metoden for 'Strutsklasse.

Eksempel 2: Polymorfisme i urelaterte klassemetoder

Som i forrige eksempel viser følgende skript bruk av polymorfisme i to forskjellige klasser, men ingen egendefinerte funksjoner brukes til å erklære objektet. De __i det__() metode for både 'sjef'og'Kontorist'klasser vil initialisere de nødvendige variablene. Polymorfisme implementeres her ved å skape post_details () og lønn() metoder inne i begge klassene. Innholdet i disse metodene er forskjellig for hver av disse klassene. Deretter blir objektvariablene opprettet for begge klasser og iterert av a til en løkke. I hver iterasjon, post_details () og lønn() metoder kalles for å skrive ut utdata.

#!/ usr / bin / env python3
# Definer en klasse som heter Manager
klassesjef:
def __init __ (selv, navn, avdeling):
selv-.navn = navn
selv-.post = 'Manager'
selv-.avdeling = avdeling
# Definer funksjon for å angi detaljer
def post_details (selv):
hvis selv.avdeling.øvre () == 'HR':
selv-.grunnleggende = 30000
ellers:
selv-.grunnleggende = 25000
selv-.husleie = 10000
selv-.transport = 5000
print ("Innlegget til% s er% s"% (selv.navn, selvtillit.post))
# Definer funksjon for å beregne lønn
def lønn (selv):
lønn = selvtillit.grunnleggende + selv.houseRent + selv.transportere
returlønn
# Definer en klasse som heter kontorist
klasse kontorist:
def __init __ (selv, navn):
selv-.navn = navn
selv-.post = 'Kontorist'
# Definer funksjon for å angi detaljer
def post_details (selv):
selv-.grunnleggende = 10000
selv-.transport = 2000
print ("Innlegget til% s er% s"% (selv.navn, selvtillit.post))
# Definer funksjon for å beregne lønn
def lønn (selv):
lønn = selvtillit.grunnleggende + selv.transportere
returlønn
# Lag objekter for klassene
manager = Manager ("Kabir", "hr")
kontorist = Kontorist ("Robin")
# Ring de samme funksjonene fra de forskjellige klassene
for obj i (leder, ekspeditør):
obj.post_details ()
utskrift ("Lønnen er", obj.lønn())

Produksjon

Følgende utgang viser at objektet til 'Krybbe'klasse brukes i den første iterasjonen av til løkke og lederens lønn skrives ut etter beregning. Objektet til 'Kontorist'klasse brukes i den andre iterasjonen av til løkke og ekspeditørens lønn skrives ut etter beregning.

Eksempel 3: Polymorfisme i relaterte klassemetoder

Følgende skript viser bruken av polymorfisme mellom to barneklasser. Her, både 'Triangel'og'Sirkel'er barneklassene til foreldreklassen som heter'Geometrisk_form.I henhold til arven kan barneklassen få tilgang til alle variablene og metodene i foreldreklassen. De __i det__() metoden for 'Geometrisk_form'klasse brukes i begge barneklasser for å initialisere variabelen Navn ved å bruke super() metode. Verdiene til utgangspunkt og høyde av 'Triangel'klasse vil bli initialisert på tidspunktet for oppretting av objekt. På samme måte er radiusverdiene til 'Sirkel'klasse vil bli initialisert på tidspunktet for oppretting av objekt. Formelen for beregning av arealet til en trekant er ½ × utgangspunkt × høyde, som er implementert i område() metoden for 'Triangelklasse. Formelen for beregning av arealet til en sirkel er 3.14 × (radius)2, som er implementert i område() metoden for 'Sirkelklasse. Navnene på begge metodene er de samme, her, men formålet er forskjellig. Deretter vil en strengverdi tas fra brukeren for å opprette et objekt og for å ringe metoden basert på verdien. Hvis brukeren skriver 'trekant', så er et objekt av 'Triangel' klasse blir opprettet, og hvis brukeren skriver 'sirkel', så blir et objekt av 'Sirkel' klasse vil bli opprettet. Hvis brukeren skriver inn tekst uten 'trekant' eller 'sirkel', blir det ikke opprettet noe objekt, og en feilmelding blir skrevet ut.

#!/ usr / bin / env python3
# Definer foreldreklassen
klasse Geometrisk_form:
def __init __ (selv, navn):
selv-.navn = navn
# Definer barneklasse for å beregne arealet av trekanten
klasse Triangle (Geometric_Shape):
def __init __ (selv, navn, base, høyde):
super().__init __ (navn)
selv-.base = base
selv-.høyde = høyde
def område (selv):
resultat = 0.5 * selv.base * selv.høyde
skriv ut ("\ nOmrådet til% s =% 5.2f "% (selvtill.navn, resultat))
# Definer barneklasse for å beregne sirkelområdet
klasse sirkel (geometrisk_form):
def __init __ (selv, navn, radius):
super().__init __ (navn)
selv-.radius = radius
def område (selv):
resultat = 3.14 * selv.radius ** 2
skriv ut ("\ nOmrådet til% s =% 5.2f "% (selvtill.navn, resultat))
cal_area = input ("Hvilket område vil du beregne? trekant / sirkel \ n ")
hvis cal_area.øvre () == 'TRIANGLE':
base = float (input ('Skriv inn bunnen av trekanten:'))
høyde = float (input ('Angi høyden på trekanten:'))
obj = Triangle ('Triangle', base, høyde)
obj.område()
elif cal_area.øvre () == 'CIRCLE':
radius = float (input ('Enter the radius of the circle:'))
obj = Circle ('Circle', radius)
obj.område()
ellers:
utskrift ("Feil inngang")

Produksjon

I den følgende utgangen utføres skriptet to ganger. Den første gangen, triangel blir tatt som inngang og objektet initialiseres av tre verdier, 'Triangel', utgangspunkt, og høyde. Disse verdiene blir deretter brukt til å beregne arealet til trekanten, og utskriften blir skrevet ut. Den andre gangen, sirkel blir tatt som inngang, og objektet initialiseres av to verdier, 'Sirkel'og radius. Disse verdiene blir deretter brukt til å beregne arealet av sirkelen, og utskriften blir skrevet ut.

Konklusjon

Denne artikkelen brukte enkle eksempler for å forklare tre forskjellige bruksområder for polymorfisme i Python. Begrepet polymorfisme kan også brukes uten klasser, en metode som ikke er forklart her. Denne artikkelen hjalp leserne til å lære mer om hvordan man bruker polymorfisme i objektorientert Python-programmering.

Beste Linux Distros for spill i 2021
Linux-operativsystemet har kommet langt fra det originale, enkle, serverbaserte utseendet. Dette operativsystemet har forbedret seg enormt de siste år...
Hvordan fange opp og streame spilløkten din på Linux
Tidligere ble spill bare ansett som en hobby, men med tiden så spillindustrien en enorm vekst når det gjelder teknologi og antall spillere. Spillpubli...
Beste spill å spille med håndsporing
Oculus Quest introduserte nylig den gode ideen om håndsporing uten kontrollere. Med et stadig økende antall spill og aktiviteter som utfører støtte en...