Laten we eindelijk onze eigen decorateur schrijven.
Onthoud dat een decorateur onze functie een boost geeft.
Het is gewoon een functie die een andere functie omhult en verbetert of verandert, maar de beste manier voor mij om uit te
leggen wat het is, is door onze eigen te coderen.
Dus laten we dat doen.
Laten we een mijn definiëren.
Decorateur en deze decorateur gaan meteen een functie accepteren, we moeten weten dat dit een functie
van hogere orde is nu hier.
Binnenin gaan we de functie aanroepen, maar voordat we dat doen, gaan we deze functie in
een andere functie stoppen.
Dus we gaan zeggen: definieer de wrap-functie.
Dit is dus slechts een wikkel en deze wikkelfunctie.
Het wordt een functie die deze funk gewoon uitvoert en uiteindelijk gewoon wrap teruggeeft.
Werk en merk hier op dat ik het niet noem, ik breng het gewoon terug zodat iemand het later kan
gebruiken.
Oké, laten we zeggen dat we een simpele functie hebben, hallo, en deze simpele functie, gewoon prins.
Hallo, wat een nutteloze functie.
Nu, waarom is dit nuttig, want nu kan ik dit als decorateur gebruiken. Python zodra we een A ervoor schrijven, gaat zeggen, hey, dit wordt
een decorateur en de decorateur, zolang we volgen de syntaxis van het accepteren van
een functie, het hebben van een wrapper-functie, het aanroepen van de functie en het retourneren van
de wrapper-functie kan worden gebruikt.
Dus als ik mijn decorateur doe, kijk dan hoe het allemaal blauw is.
Nu kan deze decorateur eigenlijk bovenaan worden gebruikt bij het definiëren van onze functies, dus als we mijn decorateur voor
de hallo-functie willen gebruiken, gebruiken we het als volgt, zodat wanneer ik hallo next in mijn programma aanroep.
Ik klik, ren.
Ik krijg hallo.
Oké, ik weet wat je denkt, je denkt dat dit tijdverspilling is, Andre.
Waarom moest ik dat allemaal doen?
Ik had dit gewoon kunnen doen om de hallo te vinden.
En dat was het.
Ik ben zo verward.
Nou, hier is het ding.
Wat we net met de decorateur hebben gedaan.
Heeft niets veranderd.
Het werkt precies zoals verwacht.
Maar wat het ons in staat stelt, is dat we nu extra functionaliteit kunnen toevoegen.
Weet je nog hoe ik zei dat decorateur een functie is zoals mijn decorateur die inpakt, dat is hier een andere functie, de
functie die we doorgeven.
En verbetert het, dus hoe kunnen we hallo verbeteren?
Nou, we kunnen alles doen binnen deze ingepakte functie, ik kan bijvoorbeeld zeggen afdrukken en dan
zullen we hier wat sterren afdrukken en misschien afdrukken.
Nog een set sterren hier, zodat ik Ron kan bellen.
Boem, we hebben zojuist onze hallo een boost gegeven.
Functie.
Hoe cool is dat?
En dit is de reden waarom decorateurs handig zijn door deze ene regel toe te voegen, ik kan een functie superboost geven, zodat laten we zeggen dat
ik een andere functie maak met de naam.
Door en deze aankoop gaat afdrukken.
Zie je later.
Door hier langs te bellen en op uitvoeren te klikken.
Nou, er verandert niets, maar als ik het een super boost wilde geven, hoef ik alleen maar
de decorateur te kopiëren en hier ook te gebruiken, zodat als ik het uitvoer.
Daar gaan we, we hebben ons een super boost gegeven.
Dit is de kracht van decorateurs door alleen deze syntaxis te gebruiken, ik kan extra functionaliteit toevoegen aan andere
functies.
Nu, ik weet wat je denkt en ik weet dat ik dat ook vaak blijf zeggen, het is alsof ik gedachten kan lezen,
maar.
Je denkt dat dit veel magie is, hoe doet Python-interpreter dit allemaal?
Het lijkt wel, nou ja, magie, toch?
Onder de motorkap, alles wat het goed doet, zal ik je laten zien, gebaseerd op wat we tot nu toe
hebben geleerd over functies, omdat het eersteklas burgers zijn, toch?
Alles wat we doen is letterlijk dit.
We zeggen variabele A.
Staat gelijk aan hallo.
En deze hallo inpakken en bellen met mijn decorateur.
Dus ik zeg mijn decorateur.
En daarna run ik zo'n ding.
Dus laten we zeggen dat dit hallo te goed was, ik voer het gewoon uit.
Zoals zo.
Zodat als ik dit uitvoer.
Alles werkt nog.
Het enige wat ik doe is mijn hallo-functie inpakken.
Met mijn decorateur en toewijzen aan een variabele.
Dus als we stap voor stap gaan, zien we dat mijn decorateur een functie ontvangt, in ons
geval de hallo-functie, en dan deze herverpakte functie retourneert die hier hallo heeft.
Dus we geven deze ratfunctie terug.
Dus hallo tegen nu is gelijk aan deze ingepakte functie en dan wordt deze ingepakte functie aangeroepen.
En hoe heet het met.
Wel, het drukt dit af, voert de hallo-functie uit en drukt dit vervolgens af.
Het is hetzelfde als zoiets doen.
We noemen het gewoon opnieuw als ik dit uitvoer.
Het werkt, dat ziet er vreemd uit, nietwaar, maar het zou logisch moeten zijn.
We roepen de eerste functie aan en de eerste functie retourneert een andere functie en dan noemen
we de volgende geretourneerde functie, de rep-functie.
Nu, de reden dat decorateurs nuttig zijn, is dat in plaats van dit te doen en, eerlijk gezegd, er verwarrend uit te zien,
ik gewoon de bij mijn decorateur kan toevoegen en we dit niet allemaal hoeven te doen.
Ach, hallo.
Wordt automatisch ingepakt door mijn decorateur.
Maar in wezen is dit wat de opdrachtnemer doet.
Kijk, er is niets magisch aan.
Dit is leuk, maar ik wed dat je je nog steeds afvraagt waarom decorateurs nuttig zijn.
Dus om ons begrip van decorateurs echt af te ronden, laten we een pauze nemen en ik zie je in de
volgende video.