Corso Avanzato di Sviluppo Python
Capitolo
>
Livello

Moduli di Matematica
Introspezione del codice

Obiettivo

Esamina alcuni vecchi oggetti nascosti in soffitta utilizzando l'introspezione del codice per scoprire cosa sono e come vengono utilizzati.

La soffitta dispone di un ufficio raramente utilizzato e ci sono alcune vecchie casse contenenti beni preziosi ormai dimenticati. Salvo diversa indicazione o a meno che un promemoria non fornisca le informazioni, a volte può essere piuttosto difficile identificare gli oggetti o le costanti raccolte sul campo. Inoltre, può essere complicato determinare l'ampiezza delle operazioni che puoi eseguire con un oggetto specifico o quali siano le sue proprietà. Per affrontare questo problema, possiamo utilizzare l'introspezione del codice.

L'introspezione del codice ci permette di esaminare e identificare determinati frammenti di codice e di indicare alcune delle loro proprietà. Per questo utilizzeremo quattro (4) funzioni di introspezione incorporate nel codice di base di Python: type() , id() , repr() , dir() e help(). Esse funzionano come segue:

  • type() : La funzione ti informa su quale tipo di oggetto sia l'argomento che hai passato. Per esempio, se passi una variabile come argomento, la funzione identificherà l'oggetto come una variabile.
  • id(): Ogni oggetto creato in Python ha un id unico che lo identifica all'interno del codice. Passando un oggetto come argomento di questa funzione, essa restituirà l'id unico dell'oggetto.
  • repr(): Converte un valore non stringa in una stringa, utile per trasformare i dati in una forma leggibile.
  • dir(): Mostra tutti gli attributi posseduti dall'oggetto, utile per sapere cosa è possibile realizzare con un tipo specifico di oggetto.
  • help(): Mostra tutte le informazioni riguardanti un dato oggetto, funzione, classe, ecc. presenti nel registro di Python.

Inoltre, disponiamo di una nuova funzione asincrona, la funzione display(). Questa funzione è simile alla funzione read(), ma consente di visualizzare dati dinamici, proprio come le funzioni di introspezione del codice che producono dati dinamici. La sua sintassi è la seguente: await player.dysplay( -data-). Tutte queste funzioni saranno utili per analizzare i dati; questo è utile quando utilizziamo metodi e iniziamo a importare nuove funzioni, oltre che per analizzare qualsiasi codice dal quale vogliamo identificare le proprietà.

Utilizzeremo queste funzioni per identificare e catalogare gli oggetti conservati in soffitta. Per iniziare, dirigiti verso il segno X scuro sui tappeti colorati, a partire da quello sul tappeto rosso. In quest'area ci sono tre (3) costanti: red_container, green_container e blue_container; queste costanti rappresentano i contenitori in ciascuna cassa corrispondenti a ciascun tappeto colorato.

Per ogni segno X, rivolgi lo sguardo verso la cassa e utilizza la funzione open() per aprirla, poi usa la funzione collect() con la costante del tappeto colorato corrispondente per prelevarla dalla cassa. Utilizza la funzione di introspezione type() per identificare il tipo di costante presente nella cassa; l'output prodotto è dati grezzi e, per questo, usiamo la funzione repr() per convertirlo in una stringa. Usa la funzione speak() per visualizzare la stringa risultante dalla combinazione delle funzioni e della costante, per esempio: player.speak(repr(type(red_container))). Segui questo con la funzione speak() applicata direttamente alla costante per identificarne il contenuto, per esempio: player.speak(red_container).

Una volta che tutte e tre (3) le costanti sono state prelevate, introspezionate e identificate, dirigiti verso il segno X chiaro di fronte alla scrivania. Crea tre variabili chiamate: item_id_red, item_id_green, item_id_blue; queste verranno utilizzate per memorizzare i numeri di id di ciascuna costante prelevata. Utilizza la funzione di introspezione id() per ottenere l'id unico della costante, passandola come argomento. Associa il nome della variabile al nome della costante utilizzando questo formato, per esempio: item_id_red = id(red_container). Ripeti l'operazione per tutte e tre (3) variabili e costanti.

Una volta che tutte e tre (3) le variabili sono state popolate, memorizzale tutte in una lista chiamata item_list e, al segno X chiaro, utilizza la funzione display() per assicurarti che venga annotato sul promemoria sul tavolo, in questo modo: await player.display(item_list).

Ora che la lista è stata tracciata, dirigiti verso il segno X scuro sul tappeto viola e rivolgiti verso la scrivania. Qui utilizzeremo la funzione dir() per identificare quali attributi possiede la lista, tuttavia l'output è dato grezzo e può risultare difficile da visualizzare. Per questo usiamo la funzione repr() per trasformare i dati in una stringa leggibile. Crea una variabile chiamata item_attributes e memorizza la stringa risultante, in questo modo: item_attributes = repr(dir(item_list)). Infine, utilizza la funzione display() per assicurarti che venga annotato sul promemoria sul tavolo.

Dirigiti verso il segno X scuro sul tappeto bianco e ripeti l'operazione fatta con dir(), ma utilizzando help(), che fornirà tutta la documentazione d'uso sull'oggetto. Crea una variabile chiamata item_help e memorizza la stringa risultante, in questo modo: item_help = repr(help(item_list)). Infine, utilizza la funzione read() per assicurarti che venga annotato sul promemoria sul tavolo, completando così il livello.

Libro del Codice