Coding for KidsCoding for Kids
Creatieve LevelsUitdagingenLerarengids
Stem op functies
Gevorderde Python-ontwikkelingscursus
Hoofdstuk
>
Niveau

Wiskundige Modules
Code introspectie

Doelstelling

Inspecteer enkele oude voorwerpen die op zolder zijn opgeborgen door code introspectie te gebruiken om erachter te komen wat ze zijn en hoe ze worden gebruikt.

De zolder heeft een kantoor dat zelden wordt gebruikt en er zijn een paar oude kisten die enkele waardevolle spullen bevatten die al lang zijn vergeten. Tenzij anders vermeld of tenzij een memo de informatie voorziet, kan het soms behoorlijk moeilijk zijn om voorwerpen, of constanten die in het veld worden verzameld, te identificeren. Niet alleen dat, het kan ook lastig zijn om te bepalen wat je allemaal met een specifiek object kunt doen of wat de eigenschappen ervan zijn. Om dit aan te pakken, kunnen we Code Introspection gebruiken.

Code Introspection stelt ons in staat bepaalde stukjes code te inspecteren en te identificeren en enkele van hun eigenschappen aan te geven. Hiervoor zullen we vier (4) ingebouwde introspectiefuncties gebruiken die bij de basis python-code worden geleverd: type(), id(), repr(), dir() en help(). Ze functioneren als volgt:

  • type(): De functie geeft aan welk type object het argument dat je plaatst is. Bijvoorbeeld, als je een variabele als argument plaatst, zal de functie het object als een variabele identificeren.
  • id(): Elk object dat ooit in python is aangemaakt heeft een unieke id die het object binnen de code identificeert. Door een object als argument aan deze functie door te geven, retourneert het de unieke id van het object.
  • repr(): Converteert een niet-string waarde naar een string, wat nuttig is om data om te zetten in een leesbare vorm.
  • dir(): Toont alle attributen die het object bezit, wat handig is om te weten wat er bereikt kan worden met een specifiek objecttype.
  • help(): Geeft alle beschikbare informatie over een gegeven object, functie, klasse, etc. in de python-registratie.

Daarnaast hebben we een nieuwe async-functie, namelijk de display() functie. Deze functie is vergelijkbaar met de read() functie, maar stelt je in staat om dynamische data weer te geven, net als de code introspectiefuncties die dynamische data produceren. De syntax is als volgt: await player.dysplay( -data-). Al deze functies zijn nuttig voor het analyseren van data; dit is handig wanneer we methoden gebruiken en beginnen met het importeren van nieuwe functies, evenals voor het analyseren van elke code waarvan we de eigenschappen willen identificeren.

We zullen deze functies gebruiken om de voorwerpen die op zolder zijn opgeslagen te identificeren en te catalogiseren. Begin door te lopen naar de donkere X-markeringen boven de gekleurde tapijten, te beginnen met degene boven het rode tapijt. Er zijn drie (3) constanten in dit gebied: red_container, green_container en blue_container; deze constanten vertegenwoordigen containers in elke kist die overeenkomen met elk gekleurd tapijt.

Voor elke X-markering richt je je op de kist en gebruik je de open() functie om de kisten te openen. Gebruik de collect() functie met de constante van het overeenkomstige gekleurde tapijt om het uit de kist te halen. Gebruik de type() introspectiefunctie om te identificeren welk type constante zich in de kist bevindt. De output die deze functie produceert is ruwe data, en daarom gebruiken we de repr() functie om het in een string om te zetten. Gebruik vervolgens de speak() functie om de resulterende string, die ontstaat door het combineren van de functies en de constante, weer te geven, bijvoorbeeld: player.speak(repr(type(red_container))). Volg dit op met de speak() functie met de constante om direct de inhoud te identificeren, bijvoorbeeld: player.speak(red_container).

Zodra alle drie (3) constanten zijn verzameld, geïnterpreteerd en geïdentificeerd, loop je naar de lichte X-markering voor het bureau. Maak drie variabelen aan met de namen: item_id_red, item_id_green, item_id_blue; deze worden gebruikt om de id-nummers van elk van de verzamelde constanten op te slaan. Gebruik de id() introspectiefunctie om het unieke identificatienummer van de constante te krijgen door deze als argument door te geven. Koppel de naam van de variabele aan de naam van de constante met behulp van dit formaat als voorbeeld: item_id_red = id(red_container). Doe dit voor alle drie (3) variabelen en constanten.

Zodra alle drie (3) variabelen zijn gevuld, sla je ze allemaal op in een lijst genaamd item_list en gebruik je op de lichte X-markering de display() functie om ervoor te zorgen dat het op de memo op de tafel wordt genoteerd, zoals dit: await player.display(item_list).

Nu de lijst is vastgelegd, loop je naar de donkere X-markering boven het paarse tapijt en richt je je op het bureau. Hier gaan we de dir() functie gebruiken om te identificeren welke attributen de lijst heeft, maar de output is ruwe data die moeilijk weer te geven kan zijn. Hiervoor gebruiken we de repr() functie om de data om te zetten in een leesbare string. Maak een variabele aan met de naam item_attributes en sla de resulterende string op, zoals dit: item_attributes = repr(dir(item_list)). Gebruik ten slotte de display() functie om ervoor te zorgen dat het op de memo op de tafel wordt genoteerd.

Loop naar de donkere X-markering boven het witte tapijt om hetzelfde te doen als met dir(), maar nu met help(). Dit zal alle documentatie over het gebruik van het object uiteenzetten. Maak een variabele aan met de naam item_help en sla de resulterende string op, zoals dit: item_help = repr(help(item_list)). Gebruik ten slotte de read() functie om ervoor te zorgen dat het ook op de memo op de tafel wordt genoteerd, zodat je het level voltooit.

Codeboek