Python

Polymorfisme i Python

Polymorfisme i Python
Polymorfisme betyder “mange former.”Polymorfisme er et vigtigt træk ved objektorienteret programmering (OOP).  Når den samme metode erklæres flere gange, til flere formål og i forskellige klasser, kaldes den polymorfisme. Et andet træk ved OOP er arv, hvorigennem barneklassen kan oprettes ved at arve funktionerne i overordnede klassen. Nogle gange kræver det, at programmøren erklærer en metode med samme navn i både forældre- og barneklassen til forskellige formål. Denne type opgaver kan også implementeres ved hjælp af polymorfisme. Denne artikel forklarer, hvordan polymorfisme kan defineres i objektorienteret programmering (OOP).

Eksempel 1: Polymorfisme med funktioner og objekter

Det følgende script viser brugen af ​​polymorfisme mellem to forskellige klasser. En funktion bruges til at oprette objektet for disse klasser. Værdien af ​​den navngivne variabel farve er initialiseret i __i det__() metode til både 'Papegøje' og 'Struds'klasser på tidspunktet for oprettelse af objekt. Det funktioner() metode er defineret i begge klasser, men output for metoden for hver klasse er lidt anderledes. Det Create_Object () funktion bruges til at oprette et objekt i klassen. Denne funktion udføres to gange for at oprette objektet i 'Papegøje'klasse og i'Strudsklasse. Hver kalder funktionerne () -metoden for begge klasser og udskriver output.

#!/ usr / bin / env python3
# Definer papegøje-klassen
klasse papegøje ():
def __init __ (selv, farve):
selv.farve = farve
def funktioner (selv):
print ("Papegøjeens farve er% s"% selv.farve)
print ("Papegøjen kan flyve")
# Definer strudseklassen
klasse struds ():
def __init __ (selv, farve):
selv.farve = farve
def funktioner (selv):
print ("Strudsens farve er% s"% selv.farve)
print ("Strudsen kan ikke flyve")
# Definer den funktion, der skal kaldes klassens metode
def Create_Object (objekt):
Objekt.funktioner()
# Opret objekt af papegøjeklassen
Create_Object (Papegøje ('Grøn'))
# Opret objekt af strudseklasse
Create_Object (struds ('sort og hvid'))

Produktion

Følgende output viser, at genstanden for 'Papegøje'klasse oprettes med'Grønsom den farve værdi. Funktionen udskriver output ved at ringe til funktioner() metoden til 'Papegøjeklasse. Dernæst genstanden for 'Struds'klasse oprettes med'Sort og hvidsom den farve værdi. Funktionen udskriver output ved at ringe til funktioner() metoden til 'Strudsklasse.

Eksempel 2: Polymorfisme i ikke-relaterede klassemetoder

Som i det foregående eksempel viser det følgende script brugen af ​​polymorfisme i to forskellige klasser, men ingen brugerdefinerede funktioner bruges til at erklære objektet. Det __i det__() metode til både 'Manager'og'Ekspedient'klasser initialiserer de nødvendige variabler. Polymorfisme implementeres her ved at skabe post_details () og løn() metoder inden for begge klasser. Indholdet af disse metoder er forskelligt for hver af disse klasser. Dernæst oprettes objektvariablerne for begge klasser og gentages af a til en løkke. I hver iteration er post_details () og løn() metoder kaldes til at udskrive output.

#!/ usr / bin / env python3
# Definer en klasse ved navn Manager
klasseleder:
def __init __ (selv, navn, afdeling):
selv.navn = navn
selv.post = 'Manager'
selv.afdeling = afdeling
# Definer funktion for at indstille detaljer
def post_details (selv):
hvis selv.afdeling.øvre () == 'HR':
selv.grundlæggende = 30000
andet:
selv.grundlæggende = 25000
selv.husleje = 10000
selv.transport = 5000
print ("Indlægget på% s er% s"% (selv.navn, selv.stolpe))
# Definer funktion til beregning af løn
def løn (selv):
løn = selv.grundlæggende + selv.houseRent + selv.transportere
returløn
# Definer en klasse ved navn Clerk
klasse kontorist:
def __init __ (selv, navn):
selv.navn = navn
selv.post = 'Kontorist'
# Definer funktion for at indstille detaljer
def post_details (selv):
selv.grundlæggende = 10000
selv.transport = 2000
print ("Indlægget på% s er% s"% (selv.navn, selv.stolpe))
# Definer funktion til beregning af løn
def løn (selv):
løn = selv.grundlæggende + selv.transportere
returløn
# Opret objekter til klasserne
manager = Manager ("Kabir", "hr")
clerk = Clerk ("Robin")
# Ring til de samme funktioner fra de forskellige klasser
for obj i (manager, ekspeditør):
obj.post_details ()
print ("Lønnen er", obj.løn())

Produktion

Følgende output viser, at genstanden for 'Krybbe'klasse bruges i den første iteration af til loop og lederens løn udskrives efter beregning. Genstanden for 'Ekspedient'klasse bruges i anden iteration af til løkke, og ekspeditørens løn udskrives efter beregning.

Eksempel 3: Polymorfisme i relaterede klassemetoder

Følgende script viser brugen af ​​polymorfisme mellem to barneklasser. Her begge 'Trekant'og'Cirkel'er barneklasser i den overordnede klasse, der hedder'Geometrisk_form.'I henhold til arven kan barneklassen få adgang til alle forældreklassens variabler og metoder. Det __i det__() metoden til 'Geometrisk_form'klasse bruges i begge underordnede klasser til at initialisere variablen navn ved hjælp af super() metode. Værdierne for grundlag og højde af 'Trekant'klasse vil blive initialiseret på tidspunktet for oprettelse af objekt. På samme måde er radiusværdierne for 'Cirkel'klasse vil blive initialiseret på tidspunktet for oprettelse af objekt. Formlen til beregning af arealet af en trekant er ½ × grundlag × højde, som er implementeret i areal() metoden til 'Trekantklasse. Formlen til beregning af arealet af en cirkel er 3.14 × (radius)2, som er implementeret i areal() metoden til 'Cirkelklasse. Navnene på begge metoder er de samme her, men formålet er anderledes. Dernæst tages en strengværdi fra brugeren for at oprette et objekt og kalde metoden baseret på værdien. Hvis brugeren skriver 'trekant', så er et objekt af 'Trekant' klasse oprettes, og hvis brugeren skriver 'cirkel', så et objekt af 'Cirkel' klasse oprettes. Hvis brugeren skriver tekst uden 'trekant' eller 'cirkel', oprettes der ikke et objekt, og der udskrives en fejlmeddelelse.

#!/ usr / bin / env python3
# Definer overordnet klasse
klasse Geometrisk_form:
def __init __ (selv, navn):
selv.navn = navn
# Definer barneklasse til beregning af arealet af trekanten
klasse trekant (geometrisk_form):
def __init __ (selv, navn, base, højde):
super().__init __ (navn)
selv.base = base
selv.højde = højde
def område (selv):
resultat = 0.5 * selv.base * selv.højde
print ("\ nOmrådet for% s =% 5.2f "% (selv.navn, resultat))
# Definer barneklasse til beregning af cirkelarealet
klasse cirkel (geometrisk_form):
def __init __ (selv, navn, radius):
super().__init __ (navn)
selv.radius = radius
def område (selv):
resultat = 3.14 * selv.radius ** 2
print ("\ nOmrådet for% s =% 5.2f "% (selv.navn, resultat))
cal_area = input ("Hvilket område vil du beregne? trekant / cirkel \ n ")
hvis cal_area.øvre () == 'TRIANGLE':
base = float (input ('Indtast bunden af ​​trekanten:'))
højde = float (input ('Indtast højden på trekanten:'))
obj = Triangle ('Triangle', base, height)
obj.areal()
elif cal_area.øvre () == 'CIRCLE':
radius = float (input ('Indtast cirkelens radius:'))
obj = Cirkel ('Cirkel', radius)
obj.areal()
andet:
print ("Forkert input")

Produktion

I den følgende output udføres scriptet to gange. Den første gang, trekant tages som input og objektet initialiseres med tre værdier, 'Trekant'', grundlag, og højde. Disse værdier bruges derefter til at beregne arealet af trekanten, og output vil blive udskrevet. Anden gang, cirkel tages som input, og objektet initialiseres med to værdier, 'Cirkel'og radius. Disse værdier bruges derefter til at beregne cirkelområdet, og output udskrives.

Konklusion

Denne artikel brugte nemme eksempler til at forklare tre forskellige anvendelser af polymorfisme i Python. Begrebet polymorfisme kan også anvendes uden klasser, en metode, der ikke er forklaret her. Denne artikel hjalp læserne med at lære mere om, hvordan man anvender polymorfisme i objektorienteret Python-programmering.

Sådan downloades og afspilles Sid Meiers Civilization VI på Linux
Introduktion til spillet Civilization 6 er et moderne udtryk for det klassiske koncept, der blev introduceret i serien af ​​Age of Empires-spil. Ideen...
Sådan installeres og afspilles Doom på Linux
Introduktion til undergang Doom-serien opstod i 90'erne efter frigivelsen af ​​den originale Doom. Det var et øjeblikkeligt hit, og fra den tid af har...
Vulkan til Linux-brugere
Med hver nye generation af grafikkort ser vi spiludviklere skubbe grænserne for grafisk troskab og komme et skridt tættere på fotorealisme. Men på tro...