Coding for KidsCoding for Kids
Poziomy KreatywneWyzwaniaPrzewodnik dla Nauczycieli
Głosuj na funkcje
Zaawansowany kurs programowania w Pythonie
Rozdział
>
Poziom

Moduły matematyczne
Introspekcja kodu

Cel

Zbadaj kilka starych przedmiotów schowanych na strychu, korzystając z introspekcji kodu, aby dowiedzieć się, czym są i jak są używane.

Strych ma biuro, które rzadko jest używane, a kilka starych skrzyń zawiera niegdyś cenne przedmioty, już od dawna zapomniane. O ile nie powiedziano inaczej lub chyba że notatka zawiera odpowiednie informacje, czasem trudno zidentyfikować przedmioty lub stałe zbierane na miejscu. Co więcej, może być trudno określić, co można osiągnąć za pomocą konkretnego obiektu lub jakie są jego właściwości. Aby to rozwiązać, możemy użyć Introspekcji Kodu.

Introspekcja kodu pozwala nam przeglądać i identyfikować fragmenty kodu oraz wskazywać niektóre z ich właściwości. W tym celu użyjemy czterech (4) wbudowanych funkcji introspekcyjnych dostarczonych z bazowym kodem Pythona: type(), id(), repr(), dir() oraz help(). Działają one następująco:

  • type(): Funkcja informuje, jakiego rodzaju obiektem jest przekazany argument. Na przykład, jeśli przekażesz zmienną jako argument, funkcja zidentyfikuje obiekt jako zmienną.
  • id(): Każdy obiekt stworzony w Pythonie ma unikalny identyfikator, który identyfikuje obiekt w kodzie. Przekazując obiekt jako argument tej funkcji, zwróci ona jego unikalny identyfikator.
  • repr(): Konwertuje wartość niebędącą ciągiem znaków na ciąg, dzięki czemu dane stają się czytelne.
  • dir(): Wyświetla wszystkie atrybuty posiadane przez funkcję, co jest przydatne do sprawdzenia, co można osiągnąć za pomocą konkretnego typu obiektu.
  • help(): Wyświetla wszystkie dostępne informacje o danym obiekcie, funkcji, klasie itp., znajdujące się w rejestrze Pythona.

Dodatkowo mamy nową funkcję asynchroniczną display(). Funkcja ta jest podobna do funkcji read(), ale pozwala na wyświetlanie dynamicznych danych, podobnie jak funkcje introspekcyjne generujące dynamiczne dane. Jej składnia wygląda następująco: await player.dysplay( -data-). Wszystkie te funkcje będą przydatne do analizowania danych, co jest użyteczne, gdy używamy metod i zaczynamy importować nowe funkcje, a także do analizowania dowolnego kodu, z którego chcemy uzyskać informacje o właściwościach.

Będziemy używać tych funkcji do identyfikacji i katalogowania przedmiotów przechowywanych na strychu. Na początek, udaj się do ciemnego X oznaczonego na kolorowych dywanach, zaczynając od tego nad czerwonym dywanem. W tym rejonie znajduje się trzy (3) stałe: red_container, green_container oraz blue_container. Stałe te reprezentują pojemniki w każdej skrzyni odpowiadającej danemu kolorowemu dywanowi.

Dla każdego X, stań przed skrzynią i użyj funkcji open() do jej otwarcia, a następnie funkcji collect() wraz z odpowiednią stałą dla danego koloru dywanu, aby pobrać przedmiot ze skrzyni. Użyj funkcji introspekcyjnej type(), aby zidentyfikować, jakiego typu stała znajduje się w skrzyni; wynik, który ona zwróci, to surowe dane, dlatego używamy funkcji repr(), aby przekształcić je w ciąg znaków. Użyj funkcji speak(), aby wyświetlić uzyskany ciąg, łącząc wynik działania funkcji z daną stałą, na przykład: player.speak(repr(type(red_container))). Następnie wywołaj funkcję speak() ze stałą, aby bezpośrednio zidentyfikować zawartość, na przykład: player.speak(red_container).

Gdy wszystkie trzy (3) stałe zostaną zebrane, zintrospekcjonowane i zidentyfikowane, udaj się do jasnego X oznaczonego przed biurkiem. Utwórz trzy zmienne o nazwach: item_id_red, item_id_green, item_id_blue. Będą one służyły do przechowywania numerów identyfikacyjnych dla każdej z zebranych stałych. Użyj funkcji introspekcyjnej id(), aby uzyskać unikalny numer identyfikacyjny stałej, przekazując ją jako argument. Dopasuj nazwę zmiennej do nazwy stałej, używając na przykład takiego formatu: item_id_red = id(red_container). Zrób to dla wszystkich trzech (3) zmiennych i stałych.

Gdy wszystkie trzy (3) zmienne zostaną uzupełnione, umieść je wszystkie w liście o nazwie item_list i przy jasnym X użyj funkcji display(), aby upewnić się, że została zanotowana na notatce na stole, w następujący sposób: await player.display(item_list).

Gdy lista została już spisana, udaj się do ciemnego X nad fioletowym dywanem i stań przy biurku. Tutaj użyjemy funkcji dir(), aby zidentyfikować, jakie atrybuty posiada lista, jednak wynik to surowe dane, które mogą być trudne do wyświetlenia. Dlatego używamy funkcji repr(), aby przekształcić dane w czytelny ciąg znaków. Utwórz zmienną o nazwie item_attributes i zapisz w niej otrzymany ciąg, na przykład: item_attributes = repr(dir(item_list)). Na koniec użyj funkcji display(), aby upewnić się, że jest ona zanotowana na notatce na stole.

Udaj się do ciemnego X nad białym dywanem, aby zrobić to samo, co z dir(), ale z help(). Spowoduje to wyświetlenie pełnej dokumentacji dotyczącej użycia obiektu. Utwórz zmienną o nazwie item_help i zapisz w niej otrzymany ciąg, na przykład: item_help = repr(help(item_list)). Na końcu użyj funkcji read(), aby upewnić się, że również ta informacja została zanotowana na notatce na stole i aby ukończyć poziom.

Księga Kodów