Een laatste pijler van OLP te gaan, we hadden het over inkapseling, over abstractie en over
overerving, en dan is er deze vierde met een behoorlijk moeilijk woord, polymorfisme.
Wat betekent dat?
Nou, Polly betekent veel en meer.
Fiza betekent voor zoveel vormen.
Nu weten we dat methoden bij objecten horen, toch?
We gebruiken het sleutelwoord zelf om te reageren op het object dat is geïnstantieerd.
In Python verwijst dit idee van polymorfisme naar de manier waarop objectklassen dezelfde methodenaam
kunnen delen.
Maar die metha-namen kunnen anders werken op basis van wat het object ze noemt.
Dat klinkt erg verwarrend, dus laten we eens naar een code kijken.
We hebben onze gebruikerswizard en Archer Classis.
En zoals ik al zei, met polymorfisme kunnen verschillende objectklassen methodenamen delen, dus we
hebben hier een aanval die wordt gedeeld, maar elk doet iets anders op basis van het attribuut.
Bijvoorbeeld als ik een aanval doe.
Dus laten we dat doen.
Wizzard één punt aanval.
Als ik op rennen klik, krijg ik een aanval met een kracht van 60 omdat Wizzard een speciale betekenis heeft voor zijn
aanval tegen Archer.
Ze zijn anders.
Dus hoewel ze dezelfde methodenamen delen vanwege het object dat het aanroept, zal de uitvoer
anders zijn.
Dus we kunnen hier echt iets heel interessants doen, laten we zeggen dat
ik Wizzard één heb en dan hebben we ook Archer één en Archer één zal Robin zijn.
En Robin heeft nu 30 uur.
Wat ik hier kan doen, is ze eigenlijk op verschillende manieren te noemen, ik
kan bijvoorbeeld een geheel nieuwe functie maken met de naam speleraanval in deze speleraanvallen neemt een personage.
En hier kunnen we karakterstipaanval zeggen.
En als ik nu deze code uitvoer en zeg.
Speler aanval.
Tovenaar één.
En ik voer dit uit.
Ik zal aanvallen met de kracht van één als ik een speler aanval, Archer hier hebben, als ik op rennen klik.
Je ziet dat dezelfde functie me een andere uitvoer geeft, ook al noemen
we hetzelfde vanwege het object dat we erin doorgeven polymorfisme, een andere manier om dit aan te tonen is
als we een for-lus doen, als ik dat doe voor, laten we zeggen, karakter erin en laten we Wizzard één en Archer één toevoegen aan een lijst.
En als ik hier print of laten we een character dot attack uitvoeren.
Als ik hier op uitvoeren klik.
Nogmaals, ik heb twee verschillende uitgangen, ook al roep ik dezelfde methode aan vanwege de verschillende
objecten en dit is een heel krachtig concept, toch, omdat we dit kunnen aanpassen aan onze specifieke
behoeften, zelfs als, laten we zeggen dat de gebruiker een aanval heeft gehad.
Methode en deze standaard aanvalsmethode is, laten we zeggen dat print niets doet omdat het gewoon een gebruiker is.
Zelfs als ik deze uitvoer, laten we zeggen afdrukwizard één.
En laten we zeggen dot attack, als ik klik, ren.
Het zal de oorspronkelijke aanval overschrijven, omdat we die methode al in onze tovenaarsklasse
hebben.
Maar laten we zeggen dat ik zowel Yuzu als Wizzard de aanvalsmethode wilde laten uitvoeren, hoe kan ik dit doen?
Nu, dit is iets dat we in de volgende video wat meer zullen onderzoeken, maar voor nu
kan ik zeggen gebruikerspuntaanval.
En geef het zelf.
Omdat ik gebruiker hier als mijn parameter accepteer.
En dan ik Camron, gebruiker dot aanval.
Dus laten we eens kijken wat er hier gebeurt als ik op uitvoeren klik.
Ik heb niets doen en aanvallen met kracht van 60.
Dus polymorfisme stelt ons in staat om vele vormen te hebben, het is het vermogen om methoden voor deze afgeleide klassen te
herdefiniëren, namelijk Wizard en Archer.
En een object dat wordt geïnstantieerd, kan zich op verschillende manieren in verschillende vormen gedragen, gebaseerd op polymorfisme.
En dit is handig omdat we onze lessen kunnen aanpassen aan onze specifieke behoeften.
Maar we hoeven onszelf ook niet te herhalen voor het geval we iets als een aanval van een gebruiker in Wizard
willen gebruiken.
Dus daar heb je het, de vier pijlers van OPIS-inkapseling.
Abstractie.
Overerving en dan tenslotte polymorfisme.
Nu zal geen enkele hoeveelheid video's of boeken je precies leren wanneer je wat moet gebruiken.
Het idee hier is om te begrijpen dat deze bevoegdheden bestaan met OLP.
Je gaat nooit zeggen, oh, ik moet polymorfisme implementeren.
Nee, meestal codeer je gewoon mee en het gebeurt dat je codeert op een manier die
polymorfisme benadrukt.
Dit is gewoon de kracht van OLP, hoewel dit grote woorden zijn, hebben we uiteindelijk geleerd hoe we
ze kunnen gebruiken om onze code op een efficiënte en schone manier te structureren.
En dat is het hele punt.
Het draait allemaal om het organiseren van onze code.
Nu, sommigen van jullie waren misschien een beetje in de war toen ik deze user dot-aanval zelf deed in de volgende video, ik wil
dit een beetje meer onderzoeken.
Ik zie je bij die ene.