Coding for KidsCoding for Kids
Kreative LevelHerausforderungenLehrerhandbuch
Für Funktionen abstimmen
Fortgeschrittener Python-Entwicklungskurs
Kapitel
>
Stufe

Mathematikmodule
Code-Introspektion

Zielsetzung

Untersuche einige alte Gegenstände, die auf dem Dachboden versteckt sind, indem du Code-Introspektion anwendest, um herauszufinden, was sie sind und wie sie verwendet werden.

Der Dachboden verfügt über ein Büro, das selten benutzt wird, und es gibt einige alte Truhen, die wertvolle Gegenstände enthalten, die längst vergessen sind. Sofern nicht anders angegeben oder durch ein Memo informiert wird, kann es manchmal ziemlich schwierig sein, Objekte oder Konstanten, die im Feld gesammelt werden, zu identifizieren. Außerdem kann es schwer sein, den Umfang der Dinge zu erkennen, die man mit einem bestimmten Objekt erreichen kann, oder welche Eigenschaften es besitzt. Um das zu lösen, können wir Code-Introspektion verwenden.

Die Code-Introspektion ermöglicht es uns, bestimmte Codeausschnitte zu inspizieren und zu identifizieren und einige seiner Eigenschaften anzuzeigen. Hierfür verwenden wir vier (4) in den Basis-Python-Code integrierte Introspektionsfunktionen: type(), id(), repr(), dir() und help(). Sie funktionieren wie folgt:

  • type(): Diese Funktion informiert dich, um welchen Objekttyp es sich bei dem eingegebenen Argument handelt. Zum Beispiel wird das Objekt als Variable identifiziert, wenn du eine Variable übergibst.
  • id(): Jedes in Python erstellte Objekt besitzt eine eindeutige ID, die es im Code identifiziert. Wird ein Objekt als Argument übergeben, gibt die Funktion die eindeutige ID des Objekts zurück.
  • repr(): Konvertiert einen Wert, der kein String ist, in einen String; nützlich, um Daten in ein lesbares Format zu überführen.
  • dir(): Zeigt alle Attribute an, die das Objekt besitzt, um zu erkennen, was mit einem bestimmten Objekttyp erreicht werden kann.
  • help(): Zeigt alle verfügbaren Informationen über ein gegebenes Objekt, eine Funktion, Klasse etc. an, die im Python-Register vorhanden sind.

Zudem haben wir eine neue asynchrone Funktion namens display(). Diese Funktion ähnelt der read()-Funktion, ermöglicht es jedoch, dynamische Daten anzuzeigen – ähnlich wie die Code-Introspektionsfunktionen, die dynamische Daten erzeugen. Ihre Syntax sieht folgendermaßen aus: await player.display( -data-). Alle diese Funktionen werden nützlich sein, um Daten zu analysieren. Dies ist hilfreich, wenn wir Methoden verwenden und neue Funktionen importieren, sowie für die Analyse von Code, von dem wir Eigenschaften identifizieren möchten.

Wir werden diese Funktionen verwenden, um die im Dachboden gelagerten Gegenstände zu identifizieren und zu katalogisieren. Bewege dich zuerst zu den dunklen X-Markierungen über den farbigen Teppichen, beginnend mit dem über dem roten Teppich. In diesem Bereich befinden sich drei (3) Konstanten: red_container, green_container und blue_container. Diese Konstanten repräsentieren Container in jeder Truhe, die den jeweiligen farbigen Teppichen zugeordnet sind.

Bei jeder X-Markierung drehst du dich zur Truhe und verwendest die open()-Funktion, um die Truhen zu öffnen. Nutze die collect()-Funktion mit der jeweiligen Konstanten des entsprechenden farbigen Teppichs, um das Objekt aus der Truhe zu holen. Verwende die type()-Introspektionsfunktion, um den Typ der Konstante in der Truhe zu identifizieren; der ausgegebene Wert ist Rohdaten. Dafür nutzen wir die repr()-Funktion, um ihn in einen String umzuwandeln. Benutze die speak()-Funktion, um den resultierenden String, der durch die Kombination der Funktionen und der Konstante entsteht, anzuzeigen, zum Beispiel: player.speak(repr(type(red_container))). Anschließend rufst du die speak()-Funktion mit der Konstante auf, um den Inhalt direkt zu identifizieren, zum Beispiel: player.speak(red_container).

Sobald alle drei (3) Konstanten gesammelt, introspektiert und identifiziert wurden, gehe zur hellen X-Markierung vor dem Schreibtisch. Erstelle drei Variablen mit den Namen: item_id_red, item_id_green, item_id_blue. Diese werden verwendet, um die Identifikationsnummern der gesammelten Konstanten zu speichern. Verwende die id()-Introspektionsfunktion, um die eindeutige Identifikationsnummer der Konstante zu erhalten, indem du sie als Argument übergibst. Ordne den Namen der Variablen dem Namen der Konstante zu, zum Beispiel: item_id_red = id(red_container). Wiederhole dies für alle drei (3) Variablen und Konstanten.

Sobald alle drei (3) Variablen gefüllt wurden, speichere sie alle in einer Liste namens item_list und benutze die helle X-Markierung, um mithilfe der display()-Funktion sicherzustellen, dass sie auf dem Memo auf dem Tisch vermerkt ist, zum Beispiel: await player.display(item_list).

Nachdem die Liste erfasst wurde, gehe zur dunklen X-Markierung über dem lila Teppich und richte dich zum Schreibtisch. Hier werden wir die dir()-Funktion verwenden, um die Attribute der Liste zu identifizieren. Da die Ausgabe Rohdaten sind und schwer darzustellen sein können, nutzen wir die repr()-Funktion, um die Daten in einen lesbaren String umzuwandeln. Erstelle eine Variable namens item_attributes und speichere den resultierenden String, zum Beispiel: item_attributes = repr(dir(item_list)). Abschließend verwende die display()-Funktion, um sicherzustellen, dass dies auf dem Memo auf dem Tisch vermerkt ist.

Gehe zur dunklen X-Markierung über dem weißen Teppich und wiederhole den Vorgang, den du mit dir() durchgeführt hast, diesmal jedoch mit help(). Dies wird alle Dokumentationshinweise zur Verwendung des Objekts aufzeigen. Erstelle eine Variable namens item_help und speichere den resultierenden String, zum Beispiel: item_help = repr(help(item_list)). Abschließend verwende die read()-Funktion, um sicherzustellen, dass dies ebenfalls auf dem Memo auf dem Tisch vermerkt ist, um das Level abzuschließen.

Codebuch