Avanceret Python Udviklingskursus
Kapitel
>
Niveau
Matematikmoduler
Kodeintrospektion
Mål
Inspicer nogle gamle genstande gemt væk på loftet ved at bruge kode-introspektion for at finde ud af, hvad de er, og hvordan de bruges.
Loftet har et kontor, der sjældent benyttes, og der er et par gamle kister, der indeholder nogle værdifulde genstande, som længe er blevet glemt. Medmindre andet er angivet, eller medmindre en notits giver informationen, kan det nogle gange være ret svært at identificere genstande eller konstanter, der indsamles i felten. Ikke kun det, men det kan også være svært at identificere, hvilke opgaver du kan udføre med en specifik genstand, eller hvad dens egenskaber er. For at løse dette kan vi bruge kode-introspektion.
Kode-introspektion giver os mulighed for at inspicere og identificere visse kodeudsnit og angive nogle af deres egenskaber. Til dette vil vi bruge fire (4) indbyggede introspektionsfunktioner, som er en del af basis Python-koden: type(), id(), repr(), dir() og help(). De fungerer som følger:
type(): Funktionen informerer dig om, hvilken type objekt det argument, du angiver, er. For eksempel, hvis du angiver en variabel som argument, vil funktionen identificere objektet som en variabel.id(): Hvert objekt, der nogensinde er oprettet i Python, har et unikt id, som identificerer objektet i koden. Ved at angive et objekt som argument til denne funktion, vil den returnere objektets unikke id.repr(): Konverterer en ikke-streng værdi til en streng, hvilket er nyttigt til at konvertere data til en læsbar form.dir(): Viser alle attributter, som objektet besidder, hvilket er nyttigt for at vide, hvad der kan opnås med en specifik objekttype.help(): Viser al information om et givet objekt, funktion, klasse osv., som er tilgængelig i Pythons register.
Derudover har vi en ny asynkron funktion, nemlig display()-funktionen. Denne funktion ligner read()-funktionen, men giver dig mulighed for at vise dynamiske data, ligesom kode-introspektionsfunktionerne, der producerer dynamiske data. Dens syntaks er som følger: await player.dysplay( -data-). Alle disse funktioner vil være nyttige til at analysere data, hvilket er nyttigt, når vi bruger metoder og begynder at importere nye funktioner samt til at analysere al den kode, vi ønsker at identificere egenskaber fra.
Vi vil bruge disse funktioner til at identificere og katalogisere de genstande, der er opbevaret på loftet. For at starte, gå til de mørke X-mærker over de farvede tæpper, startende med det over det røde tæppe. Der er tre (3) konstanter i dette område: red_container, green_container og blue_container, disse konstanter repræsenterer beholdere i hver kiste, der svarer til hvert farvede tæppe.
For hvert X-mærke, vend dig mod kisten og brug open()-funktionen til at åbne kisterne, brug collect()-funktionen med konstanten for det tilsvarende farvede tæppe for at hente den fra kisten. Brug type() introspektionsfunktionen til at identificere, hvilken type konstant der er i kisten; den output, den producerer, er rå data, og derfor bruger vi repr()-funktionen til at konvertere den til en streng. Brug speak() til at vise den resulterende streng, som dannes ved at kombinere funktionerne og konstanten, for eksempel: player.speak(repr(type(red_container))). Følg derefter op med speak()-funktionen med konstanten for direkte at identificere indholdet, for eksempel: player.speak(red_container).
Når alle tre (3) konstanter er blevet indsamlet, inspiceret og identificeret, skal du gå til det lyse X-mærke foran skrivebordet. Opret tre variabler med navnene: item_id_red, item_id_green, item_id_blue; disse vil blive brugt til at gemme id-numre for hver af de konstanter, du har indsamlet. Brug id() introspektionsfunktionen til at få konstantens unikke identifikationsnummer ved at tilføje den som et argument. Match variablens navn med konstantens navn ved at bruge dette format som eksempel: item_id_red = id(red_container). Gør dette for alle tre (3) variabler og konstanter.
Når alle tre (3) variabler er blevet fyldt, skal du gemme dem alle i en liste med navnet item_list, og på det lyse X-mærke skal du bruge display()-funktionen for at sikre, at det er noteret på notatet på bordet, således: await player.display(item_list).
Nu hvor listen er blevet noteret, skal du gå til det mørke X-mærke over det lilla tæppe og vende dig mod skrivebordet. Her vil vi bruge dir()-funktionen til at identificere, hvilke attributter listen har; dog er outputtet rå data, som kan være vanskelige at vise. Til dette bruger vi repr()-funktionen til at omdanne dataene til en læsbar streng. Opret en variabel med navnet item_attributes og gem den resulterende streng, således: item_attributes = repr(dir(item_list)). Brug til sidst display()-funktionen for at sikre, at det er noteret på notatet på bordet.
Gå til det mørke X-mærke over det hvide tæppe for at gøre det samme, som du gjorde med dir(), men nu med help(). Dette vil skitsere al dokumentationsbrug for objektet. Opret en variabel med navnet item_help og gem den resulterende streng, således: item_help = repr(help(item_list)). Brug til sidst read()-funktionen for at sikre, at det også er noteret på notatet på bordet, for at fuldføre niveauet.