Avansert Pythonutviklingskurs
Kapittel
>
Nivå
Matematikkmoduler
Kodeintrospeksjon
Mål
Undersøk noen gamle gjenstander som er gjemt bort på loftet ved å bruke kodeintrospeksjon for å finne ut hva de er og hvordan de brukes.
Loftet har et kontor som sjelden blir brukt, og det finnes noen gamle kister som inneholder verdifulle gjenstander som lenge har blitt glemt. Med mindre noe annet er spesifisert eller med mindre et notat gir informasjonen, kan det noen ganger være ganske vanskelig å identifisere gjenstander, eller konstanter som blir samlet inn på feltet. Ikke bare det, det kan være vanskelig å identifisere rekkevidden av ting du kan oppnå med et spesifikt objekt eller hva slags egenskaper det har. For å løse dette kan vi bruke kodeintrospeksjon.
Kodeintrospeksjon lar oss inspisere og identifisere visse kodebiter og angi noen av deres egenskaper. For dette skal vi bruke fire (4) innebygde introspeksjonsfunksjoner som følger med basis Python-koden: type(), id(), repr(), dir() og help(). De fungerer som følger:
type(): Funksjonen forteller deg hvilken type objekt argumentet du sender inn er. For eksempel, hvis du sender inn en variabel som argument, vil funksjonen identifisere objektet som en variabel.id(): Hvert objekt som noensinne er opprettet i Python har en unik id som identifiserer objektet i koden. Ved å sende inn et objekt som et argument til denne funksjonen vil den returnere objektets unike id.repr(): Konverterer en ikke-streng verdi til en streng, noe som er nyttig for å gjøre data lesbare.dir(): Viser alle attributter objektet besitter, noe som er nyttig for å vite hva som kan oppnås med en spesifikk objekttype.help(): Viser all informasjon om et gitt objekt, funksjon, klasse, etc. som er tilgjengelig i Pythons register.
I tillegg har vi en ny asynkron funksjon, nemlig display()-funksjonen. Denne funksjonen ligner på read()-funksjonen, men lar deg vise dynamiske data, mye som kodeintrospeksjonsfunksjonene som produserer dynamiske data. Syntaksen er som følger: await player.display( -data-). Alle disse funksjonene vil være nyttige for å analysere data. Dette er nyttig når vi bruker metoder og begynner å importere nye funksjoner, samt for å analysere hvilken kode vi ønsker å identifisere egenskaper fra.
Vi vil bruke disse funksjonene for å identifisere og katalogisere gjenstandene som er lagret på loftet. For å starte, gå til det mørke X-merket over de fargede teppene, og begynn med det som er over det røde teppet. Det er tre (3) konstanter i dette området: red_container, green_container og blue_container. Disse konstantene representerer beholdere i hver kiste som tilsvarer hvert farget teppe.
For hvert X-merke, vend deg mot kisten og bruk open()-funksjonen for å åpne kistene, bruk collect()-funksjonen med konstanten for det tilsvarende fargede teppet for å hente den fra kisten. Bruk introspeksjonsfunksjonen type() for å identifisere hvilken type konstant som finnes i kisten. Utdataene den produserer er rådata, og for dette bruker vi repr()-funksjonen for å konvertere dem til en streng. Bruk speak() for å vise den resulterende strengen fra kombinasjonen av funksjonene og konstanten, for eksempel: player.speak(repr(type(red_container))). Følg opp med speak()-funksjonen med konstanten for å identifisere innholdet direkte, for eksempel: player.speak(red_container).
Når alle tre (3) konstantene er samlet, inspisert og identifisert, gå til det lyse X-merket foran pulten. Opprett tre variabler med navn: item_id_red, item_id_green, item_id_blue. Disse vil bli brukt til å lagre id-nummer for hver av konstantene du samlet. Bruk introspeksjonsfunksjonen id() for å hente konstantens unike identifikasjonsnummer ved å sende den inn som et argument. Match navnet på variabelen med navnet på konstanten ved å bruke dette formatet som et eksempel: item_id_red = id(red_container). Gjør dette for alle tre (3) variablene og konstantene.
Når alle tre (3) variablene er fylt ut, lagre dem alle i en liste med navn item_list og bruk på det lyse X-merket display()-funksjonen for å sørge for at det er notert på notatet på bordet, slik: await player.display(item_list).
Nå som listen er blitt nedtegnet, gå til det mørke X-merket over det lilla teppet og vend deg mot pulten. Her skal vi bruke dir()-funksjonen for å identifisere hvilke attributter listen har, men utdataene er rådata som kan være vanskelige å vise. For dette bruker vi repr()-funksjonen for å omdanne dataene til en lesbar streng. Opprett en variabel med navnet item_attributes og lagre den resulterende strengen, slik: item_attributes = repr(dir(item_list)). Til slutt, bruk display()-funksjonen for å sørge for at det er notert på notatet på bordet.
Gå til det mørke X-merket over det hvite teppet for å gjøre det samme som du gjorde med dir(), men med help(). Dette vil vise all dokumentasjon ved bruk av objektet. Opprett en variabel med navnet item_help og lagre den resulterende strengen, slik: item_help = repr(help(item_list)). Til slutt, bruk read()-funksjonen for å sørge for at det også blir notert på notatet på bordet for å fullføre nivået.