Coding for KidsCoding for Kids
Luovat TasotHaasteetOpettajan Opas
Äänestä ominaisuuksia
Edistynyt Python-kehityskurssi
Luku
>
Taso

Matematiikkamoduulit
Koodin introspektio

Tavoite

Tutki joitain vanhoja tavaroita, jotka ovat kätketty ullakolle käyttämällä koodin introspektiota selvittääksesi, mitä ne ovat ja mihin niitä käytetään.

Ullakolla on toimisto, jota harvoin käytetään, ja siellä on muutama vanha arkku, jotka sisältävät arvokkaita esineitä, jotka on kauan unohdettu. Ellei toisin mainita tai ellei muistiinpanossa anneta tietoa, voi joskus olla melko vaikeaa tunnistaa kentällä kerättyjä esineitä tai vakioita. Eikä siinä tässä, voi olla hankalaa tunnistaa, mitä kaikkea voit saavuttaa tietyn objektin avulla tai mitä ominaisuuksia sillä on. Tämän ratkaisemiseksi voimme käyttää koodin introspektiota.

Koodin introspektio mahdollistaa joidenkin koodinpätkien tarkastelun ja tunnistamisen sekä joidenkin niiden ominaisuuksien näyttämisen. Tätä varten käytämme neljää (4) sisäänrakennettua introspektiofunktiota, jotka ovat osa Pythonin peruskoodia: type(), id(), repr(), dir() ja help(). Ne toimivat seuraavasti:

  • type(): Funktio kertoo, minkä tyyppinen objekti annetun argumentin perusteella on. Esimerkiksi, jos syötät muuttujan argumenttina, funktio tunnistaa objektin muuttujaksi.
  • id(): Jokaisella Pythonissa luodulla objektilla on ainutlaatuinen tunniste, joka tunnistaa objektin koodissa. Syöttämällä objektin tämän funktion argumenttina, funktio palauttaa objektin ainutlaatuisen tunnisteen.
  • repr(): Muuntaa ei-merkkijonoarvon merkkijonoksi, mikä on hyödyllistä datan muuntamisessa luettavaan muotoon.
  • dir(): Näyttää kaikki attribuutit, joita funktiolla on, ja on hyödyllinen, kun halutaan tietää, mitä kaikkea tietyn objektityypin avulla voidaan saavuttaa.
  • help(): Näyttää kaikki tiedot annetusta objektista, funktiosta, luokasta jne., jotka ovat saatavilla Pythonin rekisterissä.

Lisäksi meillä on uusi asynkroninen funktio, nimeltään display(). Tämä funktio on samankaltainen kuin read()-funktio, mutta sen avulla voit näyttää dynaamista dataa, aivan kuten koodin introspektiofunktiot, jotka tuottavat dynaamista dataa. Sen syntaksi on seuraava: await player.dysplay( -data-). Kaikki nämä funktiot ovat hyödyllisiä datan analysoinnissa, mikä on kätevää, kun käytämme metodeja ja alamme tuoda uusia funktioita sekä analysoida mitä tahansa koodia, josta haluamme tunnistaa ominaisuuksia.

Käytämme näitä funktioita tunnistaaksemme ja luokitellaksemme ullakolla säilytettävät esineet. Aloittaaksesi, kävele tummien X-merkkien luo värillisillä matoilla, alkaen punaiselta matolta. Tällä alueella on kolme (3) vakioita: red_container, green_container ja blue_container. Nämä vakio edustavat kussakin arkussa olevia säiliöitä, jotka vastaavat kutakin värillistä mattoa.

Jokaisen X-merkin kohdalla, käänny arkkua kohti ja käytä open()-funktiota avataksesi arkun, käytä collect()-funktiota vastaavan värisen maton vakion kanssa noutaaksesi sen arkusta. Käytä type()-introspektiofunktiota tunnistaaksesi, minkä tyyppinen vakio arkussa on; sen tuottama tulos on raakadataa, ja tätä varten käytämme repr()-funktiota muuntaaksemme sen merkkijonoksi. Käytä speak()-funktiota näyttääksesi yhdistettynä funktioiden ja vakion tuottaman merkkijonon, esimerkiksi: player.speak(repr(type(red_container))). Seuraa tätä speak()-funktiolla, jota käytetään vakion sisältöjen suoraan tunnistamiseen, esimerkiksi: player.speak(red_container).

Kun kaikki kolme (3) vakioita on kerätty, introspektioitu ja tunnistettu, kävele valoisan X-merkin luo pöydän eteen. Luo kolme muuttujaa nimeltä: item_id_red, item_id_green, item_id_blue. Näitä käytetään tallentamaan kullekin kerätylle vakiolle niiden tunnistenumerot. Käytä id()-introspektiofunktiota saadaksesi vakion ainutlaatuisen tunnusnumeron syöttämällä se argumenttina. Yhdistä muuttujan nimi vakion nimeen käyttäen esimerkiksi muotoa: item_id_red = id(red_container). Tee tämä kaikille kolmelle (3) muuttujalle ja vakioille.

Kun kaikki kolme (3) muuttujaa on täytetty, tallenna ne kaikki listaan nimeltä item_list ja valoisan X-merkin kohdalla käytä display()-funktiota varmistaaksesi, että ne on merkitty pöydällä olevaan muistiinpanoon, kuten näin: await player.display(item_list).

Nyt kun lista on kirjattu ylös, kävele tumman X-merkin luo violetti matto ja käänny pöydän puoleen. Tässä käytämme dir()-funktiota tunnistaaksemme, mitä attribuutteja listalla on, mutta tulos on raakadataa, jota voi olla hankala näyttää. Tätä varten käytämme repr()-funktiota muuntaaksemme datan luettavaksi merkkijonoksi. Luo muuttuja nimeltä item_attributes ja tallenna saatu merkkijono, kuten näin: item_attributes = repr(dir(item_list)). Lopuksi käytä display()-funktiota varmistaaksesi, että se on merkitty pöydän muistiinpanoon.

Kävele tumman X-merkin luo valkoisen maton kohdalle tehdäksesi saman kuin dir()-funktiolla, mutta nyt help()-funktiolla; tämä erittelee kaikki dokumentaation käyttötarkoitukset objektissa. Luo muuttuja nimeltä item_help ja tallenna saatu merkkijono, kuten näin: item_help = repr(help(item_list)). Lopuksi käytä read()-funktiota varmistaaksesi, että se on merkitty pöydän muistiinpanoon, jotta taso saadaan päätökseen.

Koodikirja