het Veranderen van de Ingebouwde Gedrag met behulp van Magie Methodes
Magic methoden zijn speciale methoden die u kunt definiëren toevoegen ‘magic’ naar uw lessen. Ze zijn altijd omgeven door dubbele underscores, bijvoorbeeld de __init__ en __Str__ magische methoden. Magische methoden kunnen ons klasseontwerp verrijken door ons toegang te geven tot de ingebouwde syntaxisfuncties van Python.
Python laat onze klassen erven van ingebouwde klassen. Een inheriting child class van een ingebouwde deelt alle dezelfde attributen, met inbegrip van methoden als de ingebouwde. We kunnen profiteren van de kern ingebouwde functionaliteit, maar aanpassen geselecteerde bewerkingen door het gebruik van magische methoden.
In deze tutorial zal ik deze twee ideeën aan elkaar koppelen om te laten zien hoe we kunnen erven van de ingebouwde lijst klasse en gebruik kunnen maken van magische methoden in ons klasseontwerp. Ik zal de drie magische methoden die lijst indexering controleren wijzigen. Door beide functies te combineren, kan een klasse die zeer eenvoudig te gebruiken is worden geconstrueerd en kunnen we gedrag toevoegen aan methoden die we wensen. Ingebouwd gedrag is bekend bij alle Python ontwikkelaars; op zijn beurt maakt dit gebruik van onze ervende klasse gemakkelijk te leren.
ten slotte zullen nog twee bredere voorbeelden worden getoond die illustreren hoe magische methoden kunnen worden gebruikt in broadcast operaties en het veranderen van de status van een instantie. Alle begeleidende code is beschikbaar via GitHub.
Voorbeeld 1: Lijst indexering
magische methoden kunnen worden gemanipuleerd om lijst indexering te wijzigen. De klasse MyCustomList, erft van het ingebouwde lijsttype. Dit betekent dat elk object dat is gemaakt via de mycoustomlist Klasse zich zal gedragen als een lijst, behalve op de plaatsen waar we ervoor kiezen om selectief methoden aan te passen.
getitem, setitem en delitem zijn magische methoden die worden aangeroepen wanneer we toegang krijgen tot de lijstindex. Het gedrag van deze magische methoden kan worden gewijzigd.
in het voorbeeld hieronder, verwerpen we het idee van lijstindexering te beginnen bij de nulde index. Als de gebruiker probeert toegang te krijgen tot een element uit onze lijst met behulp van de nulth index, zal een ValueError uitzondering worden verhoogd en het programma zal worden beëindigd. Als de gebruiker een lijstindex van meer dan één invoert, worden de methoden de index met één verminderd en wordt de bovenliggende klassenlijst met de index aangeroepen.
om te laten zien hoe deze methoden gedefinieerd in de klasse MyCustomList worden gebruikt, zie hieronder in de Python interactieve prompt.
Het voorbeeld laat zien hoe getitem, setitem en delitem kan worden genoemd. Magische methoden kunnen impliciet worden genoemd. Voor __getitem__, om toegang te krijgen tot de eerste index, schrijf de naam van het object gevolgd door de index positie tussen vierkante haken.
wat het meest interessant is, is dat wanneer we vragen om het element op indexpositie 1, de gehele waarde 1 wordt geretourneerd, ook al is 1 het Nulde element. Wat we hier hebben is een lijst die begint met het indexeren vanaf 1. In feite maakt het de verwarring goed die we allemaal hadden toen we voor het eerst lijstindexering leerden kennen.
laten we nu de gehele waarde 1 in de lijst veranderen naar 100. Om dit te doen, moeten we een beroep doen op setitem. Om dit te doen, schrijven we gewoon de naam van het object, gevolgd door vierkante haken en een toewijzing. Nogmaals, om het eerste element in de lijst te veranderen gebruiken we index positie 1. Wanneer we de lijst opnieuw uitvoeren, kunnen we duidelijk zien dat het eerste element is veranderd van 1 naar 100.
ten slotte kan een element uit de lijst __delitem__ worden verwijderd. De__ delitem _ _ magische methode wordt aangeroepen, wanneer we het Del python sleutelwoord gebruiken dat oplost naar de__ delitem _ _ methode aanroep. Om verder te bouwen op onze lijst indexeren voorbeeld, laten we verwijderen van het eerste element in de index, de integer waarde 100. Als we del noemen, gevolgd door het object en de indexpositie van het element dat we willen verwijderen, in dit voorbeeld, het eerste element in de lijst 100, kunnen we nu zien dat 100 in feite is verwijderd!
magische methoden bieden de kans om standaard gedrag te wijzigen. Het beste van alles, er is geen noodzaak om nieuwe methodenamen of een nieuwe interface te leren, zodat de methoden intuïtief kunnen worden geïmplementeerd. Een gids voor het gebruik van deze magische methoden geà mplementeerd in MyCustomList is gespecificeerd in de tabel hieronder.
Example 2: De__ mul _ _ magic method
we kunnen ook gebruik maken van de vermenigvuldigingsoperator in ons klasseontwerp. Omdat we erven van de ingebouwde lijst klasse, kunnen we twee MyCustomList objecten samen zip (omdat ze fungeren als lijst objecten) en itereren door het zip-object. Tijdens de iteraties kunnen we de elementen in elke lijst vermenigvuldigen met het overeenkomstige element in de andere lijst op een broadcast manier (zie __mul__ magic method code fragment hieronder). Dit broadcast gedrag is vergelijkbaar met dat gevonden in data analyse pakketten zoals Panda ‘ s en Numpy.
het voorbeeld laat zien dat we meerdere twee MyCustomList objecten samen kunnen gebruiken met het * teken. Als we de geretourneerde waarde vastleggen in een variabele genaamd list_three en list_three afdrukken, wordt een nieuwe lijst uitgevoerd. Deze lijst is het product van het vermenigvuldigen van de elementen tegen elkaar uit de andere 2 lijsten.