Polymorfisme i Python

Polymorfisme i Python
Polymorfisme betyr “mange former.”Polymorfisme Et viktig trekk ved objektorientert programmering (OOP). Når den samme metoden er deklarert flere ganger, for flere formål, og i forskjellige klasser, kalles den polymorfisme. Et annet trekk ved OOP er arv, som barneklassen kan opprettes ved å arve funksjonene i foreldreklassen. Noen ganger krever det at programmereren erklærer en metode med samme navn i både foreldre- og barneklasser for forskjellige formål. Denne typen oppgaver kan også implementeres ved å bruke polymorfisme. Denne artikkelen forklarer hvordan polymorfisme kan defineres i objektorientert programmering (OOP).

Eksempel 1: Polymorfisme med funksjoner og objekter

Følgende skript viser bruk av polymorfisme mellom to forskjellige klasser. En funksjon brukes til å lage objektet til disse klassene. Verdien av variabelen som er navngitt farge initialiseres i __i det__() metode for begge 'Papegøye' og 'Struts'Klasser på tidspunktet for objektoppretting. De egenskaper() Metoden er definert i begge klasser, men utgangen av metoden for hver klasse er litt annerledes. De Create_object () Funksjon brukes til å lage et objekt i klassen. Denne funksjonen utføres to ganger for å lage objektet i 'Papegøye'Klasse og i'Struts'Klasse. Hver vil kalle funksjonene () metoden for begge klasser og skrive ut utdataene.

#!/usr/bin/env python3
# Definer papegøye -klassen
klasse Parrot ():
def __init __ (selv, farge):
selv-.farge = farge
def funksjoner (selv):
trykk ("Fargen på papegøyen er %s" %selv.farge)
trykk ("Papegøyen kan fly")
# Definer strutsklassen
klasse struts ():
def __init __ (selv, farge):
selv-.farge = farge
def funksjoner (selv):
trykk ("Fargen på struts er %s" %selv.farge)
trykk ("The Struck kan ikke fly")
# Definer funksjonen for å kalle metoden for klassen
def create_object (objekt):
Gjenstand.egenskaper()
# Lag gjenstand for papegøye klasse
Create_object (papegøye ('grønn'))
# Lag objekt av strutsklasse
Create_object (struts ('svart og hvitt'))

Produksjon

Følgende utgang viser at objektet til 'Papegøye'Klasse er opprettet med'Grønn'som farge verdi. Funksjonen skriver ut utgangen ved å ringe egenskaper() metode for 'Papegøye'Klasse. Neste, gjenstanden for 'Struts'Klasse er opprettet med'Svart og hvit'som farge verdi. Funksjonen skriver ut utgangen ved å ringe egenskaper() metode for 'Struts'Klasse.

Eksempel 2: Polymorfisme i ikke -relaterte klassemetoder

Som i forrige eksempel, viser følgende skript bruken av polymorfisme i to forskjellige klasser, men ingen tilpasset funksjon brukes til å erklære objektet. De __i det__() metode for begge 'sjef'Og'Kontorist'Klassene vil initialisere de nødvendige variablene. Polymorfisme implementeres her ved å lage Post_Details () og lønn() Metoder i begge klasser. Innholdet i disse metodene er forskjellig for hver av disse klassene. Deretter opprettes objektvariablene for begge klasser og iterert av en til en sløyfe. I hver iterasjon, Post_Details () og lønn() Metoder kalles for å skrive ut utgangen.

#!/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-.Houserent = 10000
selv-.Transport = 5000
trykk ("innlegget til %s er %s" %(selv.Navn, selv.post))
# Definer funksjon for å beregne lønn
def lønn (selv):
Lønn = selv.Grunnleggende + selv.Houserent + Self.transportere
Returlønn
# Definer en klasse som heter Clerk
Klassekontor:
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
trykk ("innlegget til %s er %s" %(selv.Navn, selv.post))
# Definer funksjon for å beregne lønn
def lønn (selv):
Lønn = selv.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 (manager, kontorist):
obj.Post_Details ()
trykk ("lønnen er", obj.lønn())

Produksjon

Følgende utgang viser at objektet til 'Krybbe'Klasse brukes i den første iterasjonen av til Loop og lønnen til lederen skrives ut etter beregning. Objektet med 'Kontorist'Klasse brukes i den andre iterasjonen av til Loop og lønnen til kontorist skrives ut etter beregning.

Eksempel 3: Polymorfisme i relaterte klassemetoder

Følgende skript viser bruk av polymorfisme mellom to barneklasser. Her, begge 'Triangel'Og'Sirkel'Er barneklassene i foreldreklassen som heter'Geometric_shape.I følge arven kan barneklassen få tilgang til alle variablene og metodene i foreldreklassen. De __i det__() metode for 'Geometric_shape'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 objekter. På samme måte er radiusverdiene til 'Sirkel'Klasse vil bli initialisert på tidspunktet for oppretting av objekter. Formelen for beregning av området til en trekant er ½ × utgangspunkt × høyde, som er implementert i område() metode for 'Triangel'Klasse. Formelen for beregning av området til en sirkel er 3.14 × (radius)2, som er implementert i område() metode for 'Sirkel'Klasse. Navnene på begge metodene er de samme, her, men formålet er annerledes. Deretter vil en strengverdi bli hentet fra brukeren for å opprette et objekt og for å kalle metoden basert på verdien. Hvis brukeren typer 'trekant', så er et objekt av 'Triangel' klasse vil bli opprettet, og hvis brukeren typer 'sirkel', så er et objekt av 'Sirkel' Klasse vil bli opprettet. Hvis brukeren skriver ut noen tekst uten 'Triangle' eller 'Circle', vil det ikke bli opprettet noe objekt, og en feilmelding vil bli skrevet ut.

#!/usr/bin/env python3
# Definer foreldreklassen
Klasse Geometric_Shape:
def __init __ (selv, navn):
selv-.Navn = Navn
# Definer barneklasse for å beregne trekantområdet
Klassetrekant (Geometric_Shape):
def __init __ (selv, navn, base, høyde):
super().__init __ (navn)
selv-.base = base
selv-.Høyde = høyde
Def Area (Self):
Resultat = 0.5 * Selv.base * selv.høyde
skriv ut ("\ n området til %s = %5.2f " %(selv.Navn, resultat))
# Definer barneklasse for beregning av sirkelområdet
Class Circle (Geometric_Shape):
def __init __ (selv, navn, radius):
super().__init __ (navn)
selv-.Radius = radius
Def Area (Self):
Resultat = 3.14 * Selv.Radius ** 2
skriv ut ("\ n området til %s = %5.2f " %(selv.Navn, resultat))
cal_area = input ("Hvilket område vil du beregne? trekant/sirkel \ n ")
Hvis cal_area.øvre () == 'Triangle':
base = float (input ('Angi basen til trekanten:'))
høyde = float (input ('Angi høyden på trekanten:'))
obj = trekant ('trekant', base, høyde)
obj.område()
Elif Cal_Area.øvre () == 'sirkel':
radius = float (input ('Angi sirkelen til sirkelen:'))
obj = sirkel ('sirkel', radius)
obj.område()
ellers:
Print ("Feil inngang")

Produksjon

I den følgende utgangen utføres skriptet to ganger. Den første gangen, triangel blir tatt som inngangen og objektet initialiseres av tre verdier, 'Triangel', utgangspunkt, og høyde. Disse verdiene brukes deretter til å beregne trekantenes område, og utgangen vil bli skrevet ut. Den andre gangen, sirkel blir tatt som input, og objektet initialiseres av to verdier, 'Sirkel'Og radius. Disse verdiene brukes deretter til å beregne sirkelområdet, og utgangen vil bli skrevet ut.

Konklusjon

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