Python polymorfisme

  • Dylan Parker
  • 0
  • 1179
  • 203
>

Invoering

Polymorfisme is nog een ander belangrijk aspect van Object Oriented Programming. Geen Warcraft-fans, het heeft niets te maken met het veranderen van mensen in schapen. Dat zou veel cooler zijn. In plaats daarvan staat Polymorphism toe dat methoden en functies klassen met vergelijkbare functionaliteit op dezelfde manier gebruiken.
Polymorfisme vermindert de hoeveelheid code die u moet schrijven door redundantie op een logische en zinvolle manier te elimineren. Het vertrouwt op jou, de programmeur, om slim te zijn in je ontwerp en overeenkomsten in objecten te benutten.

Wat is polymorfisme?

Polymorfisme is een van die dingen die moeilijk in één woord of zin te definiëren zijn. De term heeft enigszins verschillende vormen in verschillende programmeertalen, waardoor het een beetje moeilijker is om bondig vast te stellen. Over het algemeen, en in Python, is het de mogelijkheid om meerdere verschillende objecten afgeleid van verschillende klassen op dezelfde manier te gebruiken.
Om het voorbeeld van auto's te gebruiken waarmee deze handleiding heeft gewerkt, stel je voor dat je een functie moet schrijven die de move_forward methode op elk type auto waaraan het is doorgegeven. Elk object dat is gemaakt op basis van de oorspronkelijke klasse "Car" of een van de subklassen die deze uitbreiden, moet een move_forward methode, zelfs als het in sommige subklassen is overschreven om iets anders te doen. Dit betekent dat je door polymorfisme een enkele functie kunt schrijven die een "auto" -object nodig heeft en aanroept move_forward. Aangezien alle objecten die zijn geïnstantieerd uit de subklassen van 'Auto' technisch nog steeds 'Auto'-objecten zijn en alle oorspronkelijke eigenschappen in een of andere vorm hebben, zal dit werken.
Houd er rekening mee dat de specificatie van een enkele superklasse om als objecttype te gebruiken niet helemaal nodig is in Python. Python is niet sterk getypeerd, dus u hoeft niet expliciet te definiëren welke variabeletypen een methode of functie aanneemt. In talen als Java speelt dit een rol bij het gedrag van polymorfisme. In Python is het echter een goed idee om het op deze manier te bekijken om ervoor te zorgen dat de objecten die u doorgeeft allemaal de methode of eigenschap hebben die wordt gebruikt.

Gebruik het in Python

Het zou echt helpen om dit allemaal in actie te zien. Het is niet zo ingewikkeld als u nu waarschijnlijk denkt. Zorg er eerst voor dat u de voorbeeldklassen heeft ingesteld. Als je ze nog niet hebt, staan ​​ze eronder.
 klasse Auto (object): def __init __ (zelf, merk = 'Ford', model = 'Pinto', jaar = '1971', kilometerstand = 253812, kleur = 'oranje'): zelf .__ merk = maak zelf .__ model = model self .__ jaar = jaar zelf .__ kilometerstand = kilometerstand zelf .__ kleur = kleur def set_make (self, make): self .__ make = make def get_make (self): return self .__ make def set_model (self, model): self .__ model = model def get_model (zelf): zelf teruggeven .__ model def set_jaar (zelf, jaar): zelf .__ jaar = jaar def get_jaar (zelf): zelf teruggeven .__ jaar def set_mileage (zelf, kilometerstand): zelf .__ kilometerstand = kilometerstand def get_mileage ( self): return self .__ kilometerstand def set_color (self, color): self .__ color = color def get_color (self): return self .__ color def move_forward (self, snelheid): print ("Je% s gaat vooruit met% s "% (self .__ model, speed)) def move_backward (self, speed): print (" Moving backward at% s "% speed) class MuscleCar (Car): def __init __ (self, make = 'Ford', model = ' Mustang ', jaar =' 1965 ', kilometerstand = 54032, kleur =' blauw ', hp = 325): super () .__ init __ (merk, model, jaar, kilometerstand, kleur) self .__ hp = hp def set_hp (self, hp): self .__ hp = hp def get_hp (self): return self .__ hp def drag_race (self, tegenstander): if (self .__ hp> tegenstander.get_hp ()): retourneer "Jij wint!" anders: retourneer "You Lose!" def trade_up (zelf, jaar, kleur): super (). set_year (jaar) super (). set_color (kleur) super (). set_mileage (0) 
Als de demoklassen zijn ingesteld, kunt u een snelle functie testen die polymorfisme gebruikt om aan te roepen move_forward.
 newmusclecar = MuscleCar () newcar = Car () def go_25 (car_object): car_object.move_forward ("25mph") go_25 (newcar) go_25 (newmusclecar) 
Beide functieaanroepen gedragen zich exact hetzelfde, ook al hebben ze verschillende objecten doorgegeven die zijn gemaakt uit verschillende klassen. Dankzij polymorfisme hoeft u niet twee verschillende functies te schrijven en kunt u de vergelijkbare eigenschappen van de objecten gebruiken om slechts één functie te schrijven.
Probeer een van de move_forward methode in de klasse "MuscleCar". Voer de functie opnieuw uit en kijk wat er gebeurt.
 class MuscleCar (auto):… def move_forward (zelf, snelheid): print ("Je geweldige% s brult over de weg op% s"% (zelf .__ model, snelheid))… 
Wanneer de functie het move_forward methode op het muscle car-object, het werkt nog steeds perfect en de overschreven versie van de methode wordt gebruikt.

Gedachten sluiten

Polymorfisme klinkt alsof het een vreselijk complex concept zou zijn, maar de naam is enigszins verkeerd gericht. Het concept zelf is niet zo intimiderend, en het helpt zelfs om de algehele structuur van uw code te vereenvoudigen.
Een veelvoorkomend thema bij Object Oriented Programming is het elimineren van redundantie door de herbruikbare en aanpasbare code. Polymorfisme is een belangrijk onderdeel van dat beeld.

Opdrachten

  1. Gebruik de voorbeeldklassen om een ​​"Car" -object en een "MuscleCar" -object te instantiëren.
  2. Maak een functie die kan communiceren met elk type "auto" -object.
  3. Roep uw functie twee keer aan en geef deze beide objecten door.
  4. Overschrijf een van de methoden in de MuscleCar-klasse. Zorg ervoor dat u de parameters die het accepteert niet drastisch verandert.
  5. Roep uw functie opnieuw op.
  6. Maak een nieuwe klasse die erft van de klasse "Auto".
  7. Instanteer een nieuw object uit uw nieuw gemaakte klasse. Geef het object door aan uw functie.



Niemand heeft nog op dit artikel gereageerd.

Een verzameling nuttige informatie over het Linux-besturingssysteem en nieuwe technologieën
Nieuwe artikelen, praktische tips, gedetailleerde recensies en handleidingen. Voel je thuis in de wereld van het Linux-besturingssysteem