Coding for KidsCoding for Kids
Kreativa NivåerUtmaningarLärarguide
Rösta på funktioner
Avancerad Pythonutvecklingskurs
Kapitel
>
Nivå

Matematikmoduler
Kodintrospektion

Målsättning

Inspektera några gamla föremål som förvaras borta på vinden genom att använda kodinspektion för att ta reda på vad de är och hur de används.

På vinden finns ett kontor som sällan används och där finns ett par gamla kistor innehållande några värdefulla föremål som länge har glömts bort. Om inget annat anges eller om ingen anteckning ger informationen, kan det ibland vara ganska svårt att identifiera föremål, eller konstanter som samlats in på fältet. Dessutom kan det vara svårt att identifiera vilket omfång av saker man kan uppnå med ett specifikt objekt eller vad dess egenskaper är. För att hantera detta kan vi använda Code Introspection.

Code Introspection låter oss inspektera och identifiera vissa kodbitar samt ange några av dess egenskaper. För detta kommer vi att använda fyra (4) inbyggda introspektionsfunktioner som finns med i bas-Python: type(), id(), repr(), dir() och help(). De fungerar på följande sätt:

  • type() : Funktionen informerar dig om vilken typ av objekt argumentet du anger är. Till exempel, om du anger en variabel som argument, kommer funktionen att identifiera objektet som en variabel.
  • id(): Varje objekt som någonsin skapats i Python har ett unikt id som identifierar objektet i koden. Genom att ange ett objekt som argument till denna funktion returneras objektets unika id.
  • repr(): Konverterar ett icke-strängvärde till en sträng, användbart för att omvandla data till ett läsbart format.
  • dir(): Visar alla attribut som funktionen besitter, användbart för att veta vad som kan uppnås med en specifik objekttyp.
  • help(): Visar all information om ett givet objekt, funktion, klass, etc. som finns tillgänglig i Pythons register.

Dessutom har vi en ny asynkron funktion, display(). Denna funktion liknar funktionen read() men låter dig visa dynamisk data, ungefär som kodinspektionsfunktionerna som genererar dynamisk data. Dess syntax är som följer: await player.display(-data-). Alla dessa funktioner kommer att vara användbara för att analysera data, vilket är användbart när vi använder metoder och börjar importera nya funktioner samt för att analysera vilken kod vi vill identifiera egenskaper från.

Vi kommer att använda dessa funktioner för att identifiera och katalogisera de föremål som finns lagrade på vinden. Börja med att gå till det mörka X-märket över de färgade mattorna, med start från den över den röda mattan. Det finns tre (3) konstanter i detta område: red_container, green_container och blue_container. Dessa konstanter representerar behållare i varje kista som motsvarar varje färgad matta.

För varje X-märke, vänd dig mot kistan och använd funktionen open() för att öppna kistorna, använd funktionen collect() med konstanten för den motsvarande färgade mattan för att hämta den från kistan. Använd introspektionsfunktionen type() för att identifiera vilken typ av konstant som finns i kistan, utdata den producerar är rådata och för detta använder vi funktionen repr() för att konvertera den till en sträng. Använd funktionen speak() för att visa den resulterande strängen från att kombinera funktionerna och konstanten, till exempel: player.speak(repr(type(red_container))). Följ sedan upp med funktionen speak() med konstanten för att direkt identifiera innehållet, till exempel: player.speak(red_container).

När alla tre (3) konstanter har hämtats, inspekterats och identifierats, gå till det ljusa X-märket framför skrivbordet. Skapa tre variabler med namnen: item_id_red, item_id_green, item_id_blue. Dessa kommer att användas för att lagra id-nummer för var och en av de konstanter du hämtade. Använd introspektionsfunktionen id() för att få konstantens unika identifieringsnummer genom att lägga till den som ett argument. Matcha variabelnamnet med konstantens namn med detta format som exempel: item_id_red = id(red_container). Gör detta för alla tre (3) variabler och konstanter.

När alla tre (3) variabler har fått värden, lagra dem alla i en lista med namnet item_list och på det ljusa X-märket använd funktionen display() för att se till att det noteras på memo på bordet, på detta sätt: await player.display(item_list).

Nu när listan har noterats, gå till det mörka X-märket över den lila mattan och vänd dig mot skrivbordet. Här ska vi använda funktionen dir() för att identifiera vilka attribut listan har, men utdata är rådata som kan vara svår att visa. För detta använder vi funktionen repr() för att omvandla datan till en läsbar sträng. Skapa en variabel med namnet item_attributes och lagra den resulterande strängen, på detta sätt: item_attributes = repr(dir(item_list)). Använd slutligen funktionen display() för att se till att det noteras på memo på bordet.

Gå till det mörka X-märket över den vita mattan och gör samma sak som du gjorde med dir(), men med help(). Detta kommer att ge en översikt över all dokumentationsanvändning för objektet. Skapa en variabel med namnet item_help och lagra den resulterande strängen, på detta sätt: item_help = repr(help(item_list)). Använd slutligen funktionen read() för att se till att även detta noteras på memo på bordet, för att slutföra nivån.

Kodbok