Python

Polymorfisme in Python

Polymorfisme in Python
Polymorfisme betekent "vele vormen"." Polymorfisme een belangrijk kenmerk van objectgeoriënteerd programmeren (OOP).  Wanneer dezelfde methode meerdere keren, voor meerdere doeleinden en in verschillende klassen wordt gedeclareerd, wordt dit polymorfisme genoemd. Een ander kenmerk van OOP is: erfenis, waarmee de onderliggende klasse kan worden gemaakt door de kenmerken van de bovenliggende klasse over te nemen. Soms moet de programmeur voor verschillende doeleinden een methode met dezelfde naam declareren in zowel de ouder- als de kindklassen. Dit type taak kan ook worden geïmplementeerd met behulp van polymorfisme. Dit artikel legt uit hoe polymorfisme kan worden gedefinieerd in objectgeoriënteerd programmeren (OOP).

Voorbeeld 1: Polymorfisme met functies en objecten

Het volgende script toont het gebruik van polymorfisme tussen twee verschillende klassen. Er wordt een functie gebruikt om het object van die klassen te maken. De waarde van de variabele met de naam kleur wordt geïnitialiseerd in de __in het__() methode van zowel de 'Papegaai' en de 'Struisvogel' klassen op het moment van het maken van objecten. De Kenmerken() methode is gedefinieerd in beide klassen, maar de uitvoer van de methode voor elke klasse is een beetje anders. De Create_Object() functie wordt gebruikt om een ​​object van de klasse te maken. Deze functie wordt twee keer uitgevoerd om het object in de 'Papegaai' klasse en  in de 'Struisvogel'klas'. Elk zal de methode features() van beide klassen aanroepen en de uitvoer afdrukken.

#!/usr/bin/env python3
# Definieer de Parrot-klasse
klasse Papegaai():
def __init__(zelf,kleur):
zelf.kleur = kleur
def kenmerken (zelf):
print("De kleur van de papegaai is %s" %self.kleur)
print("De papegaai kan vliegen")
# Definieer de struisvogelklasse
klasse struisvogel():
def __init__(zelf,kleur):
zelf.kleur = kleur
def kenmerken (zelf):
print("De kleur van de struisvogel is %s" %self.kleur)
print("De struisvogel kan niet vliegen")
# Definieer de functie om de methode van de klasse aan te roepen
def Create_Object(Object):
Voorwerp.Kenmerken()
# Maak een object van de Parrot-klasse
Create_Object(Papegaai('Groen'))
# Maak een object van de struisvogelklasse
Create_Object(Struisvogel('Zwart en Wit'))

Uitgang:

De volgende uitvoer laat zien dat het object van de 'Papegaai' klasse is gemaakt met 'Groen' als de kleur waarde. De functie drukt de uitvoer af door de aan te roepen Kenmerken() methode van de 'Papegaai'klas'. Vervolgens wordt het object van de 'Struisvogel' klasse is gemaakt met 'Zwart en wit' als de kleur waarde. De functie drukt de uitvoer af door de . aan te roepen Kenmerken() methode van de 'Struisvogel'klas'.

Voorbeeld 2: Polymorfisme in niet-gerelateerde klassenmethoden Class

Net als in het vorige voorbeeld toont het volgende script het gebruik van polymorfisme in twee verschillende klassen, maar er wordt geen aangepaste functie gebruikt om het object te declareren. De __in het__() methode van zowel de 'Manager' en 'griffier' klassen zullen de benodigde variabelen initialiseren. Polymorfisme wordt hier geïmplementeerd door de post_details() en salaris() methoden binnen beide klassen. De inhoud van deze methoden is verschillend voor elk van deze klassen. Vervolgens worden de objectvariabelen voor beide klassen gemaakt en herhaald door a voor een lus. In elke iteratie wordt de post_details() en salaris() methoden worden aangeroepen om de uitvoer af te drukken.

#!/usr/bin/env python3
# Definieer een klasse met de naam Manager
klassenmanager:
def __init__(zelf, naam, afdeling):
zelf.naam = naam
zelf.post = 'Beheerder'
zelf.afdeling = afdeling
# Definieer functie om details in te stellen
def post_details(zelf):
als zelf.afdeling.upper() == 'HR':
zelf.basis = 30000
anders:
zelf.basis = 25000
zelf.huishuur = 10000
zelf.transport = 5000
print("Het bericht van %s is %s" %(self.naam, zelf.post))
# Definieer functie om salaris te berekenen
def salaris (mijzelf):
salaris = zelf.basis + zelf.huisHuur + zelf.vervoer-
salaris teruggeven
# Definieer een klasse met de naam Clerk
klasse griffier:
def __init__(zelf, naam):
zelf.naam = naam
zelf.post = 'Bediende'
# Definieer functie om details in te stellen
def post_details(zelf):
zelf.basis = 10000
zelf.vervoer = 2000
print("Het bericht van %s is %s" %(self.naam, zelf.post))
# Definieer functie om salaris te berekenen
def salaris (mijzelf):
salaris = zelf.basis + zelf.vervoer-
salaris teruggeven
# Maak objecten voor de klassen
manager = Manager ("Kabir", "hr")
klerk = klerk ("Robin")
# Roep dezelfde functies uit de verschillende klassen aan
voor obj in (manager, klerk):
obj.post_details()
print("Het salaris is ",obj.salaris())

Uitgang:

De volgende uitvoer laat zien dat het object van de 'Kribbe' klasse wordt gebruikt in de eerste iteratie van de voor lus en het salaris van de manager wordt na berekening afgedrukt. Het voorwerp van de 'griffier' klasse wordt gebruikt in de tweede iteratie van de voor lus en het salaris van de klerk wordt afgedrukt na berekening.

Voorbeeld 3: Polymorfisme in gerelateerde klassenmethoden

Het volgende script toont het gebruik van polymorfisme tussen twee onderliggende klassen. Hier beide'Driehoek' en 'Cirkel' zijn de onderliggende klassen van de bovenliggende klasse met de naam 'Geometrische vorm.' Volgens de overerving heeft de onderliggende klasse toegang tot alle variabelen en methoden van de bovenliggende klasse. De __in het__() methode van de 'Geometrische vorm' class wordt in beide onderliggende klassen gebruikt om de variabele te initialiseren naam met behulp van de super() methode. De waarden van de baseren en hoogte van de 'Driehoek' class wordt geïnitialiseerd op het moment dat het object wordt gemaakt. Op dezelfde manier kunnen de straalwaarden van de 'Cirkel' klasse wordt geïnitialiseerd op het moment dat het object wordt gemaakt. De formule voor het berekenen van de oppervlakte van een driehoek is: ½ × baseren × hoogte, die is geïmplementeerd in de Oppervlakte() methode van  de 'Driehoek'klas'. De formule voor het berekenen van de oppervlakte van een cirkel is: 3.14 × (straal)2, die is geïmplementeerd in de Oppervlakte() methode van de 'Cirkel'klas'. De namen van beide methoden zijn hier hetzelfde, maar het doel is anders. Vervolgens wordt een tekenreekswaarde van de gebruiker genomen om een ​​object te maken en de methode aan te roepen op basis van de waarde. Als de gebruiker 'driehoek' typt, wordt een object van de 'Driehoek' class wordt gemaakt, en als de gebruiker 'circle' typt, dan wordt een object van de 'Cirkel' klasse wordt gemaakt. Als de gebruiker tekst typt zonder 'driehoek' of 'cirkel', wordt er geen object gemaakt en wordt er een foutbericht afgedrukt.

#!/usr/bin/env python3
# Definieer de bovenliggende klasse
klasse Geometric_Shape:
def __init__(zelf, naam):
zelf.naam = naam
# Definieer onderliggende klasse voor het berekenen van het gebied van driehoek
klasse Driehoek (Geometrische_Vorm):
def __init__(zelf, naam, basis, hoogte):
super().__init__(naam)
zelf.basis = basis
zelf.hoogte = hoogte
def gebied (zelf):
resultaat = 0.5 * zelf.basis * zelf.hoogte
print("\nHet gebied van de %s = %5.2f" %(zelf.naam, resultaat))
# Definieer onderliggende klasse voor het berekenen van het gebied van de cirkel
klasse Cirkel (Geometrische_Vorm):
def __init__(zelf, naam, straal):
super().__init__(naam)
zelf.straal = straal
def gebied (zelf):
resultaat = 3.14 * zelf.straal**2
print("\nHet gebied van de %s = %5.2f" %(zelf.naam, resultaat))
cal_area=input("Welke oppervlakte wil je berekenen? driehoek/cirkel\n")
if cal_area.upper()== 'DRIEHOEK':
base = float(input('Voer de basis van de driehoek in: '))
hoogte = float(input('Vul de hoogte van de driehoek in: '))
obj = Driehoek('Driehoek',basis,hoogte)
obj.Oppervlakte()
elif cal_area.upper()== 'CIRKEL':
radius = float(input('Voer de straal van de cirkel in: '))
obj = Cirkel('Cirkel',straal)
obj.Oppervlakte()
anders:
print("Verkeerde invoer")

Uitgang:

In de volgende uitvoer wordt het script twee keer uitgevoerd. De eerste keer, driehoek wordt als invoer genomen en het object wordt geïnitialiseerd met drie waarden, 'Driehoek', baseren, en hoogte. Deze waarden worden vervolgens gebruikt om het gebied van de driehoek te berekenen en de uitvoer wordt afgedrukt. De tweede keer, cirkel wordt als invoer genomen en het object wordt geïnitialiseerd met twee waarden, 'Cirkel' en straal. Deze waarden worden vervolgens gebruikt om het gebied van de cirkel te berekenen en de uitvoer wordt afgedrukt.

Conclusie

Dit artikel gebruikte eenvoudige voorbeelden om drie verschillende toepassingen van polymorfisme in Python uit te leggen. Het concept van polymorfisme kan ook zonder klassen worden toegepast, een methode die hier niet wordt uitgelegd. Dit artikel hielp lezers om meer te leren over het toepassen van polymorfisme in objectgeoriënteerde Python-programmering.

Hoe een spel op Linux te ontwikkelen
Tien jaar geleden zouden niet veel Linux-gebruikers voorspellen dat hun favoriete besturingssysteem ooit een populair spelplatform voor commerciële vi...
Open source-poorten van commerciële game-engines
Gratis, open source en platformonafhankelijke game-engine-recreaties kunnen worden gebruikt om zowel oude als enkele van de vrij recente gametitels te...
Beste opdrachtregelspellen voor Linux
De opdrachtregel is niet alleen je grootste bondgenoot bij het gebruik van Linux, hij kan ook de bron van entertainment zijn omdat je hem kunt gebruik...