Curso Avanzado de Desarrollo en Python
Capítulo
>
Nivel
Módulos de Matemáticas
Introspección de Código
Objetivo
Inspecciona algunos objetos antiguos guardados en el ático utilizando la introspección de código para descubrir qué son y cómo se usan.
El ático cuenta con una oficina que rara vez se utiliza y hay unos pocos cofres viejos que contienen objetos de valor que han sido olvidados hace mucho tiempo. A menos que se indique lo contrario o que un memorando proporcione la información, a veces puede ser bastante difícil identificar los objetos, o las constantes que se recopilan en el campo. Además, puede resultar complicado identificar el alcance de lo que se puede lograr con un objeto específico o cuáles son sus propiedades. Para abordar esto, podemos utilizar la Introspección de Código.
La Introspección de Código nos permite inspeccionar e identificar ciertos fragmentos de código e indicar algunas de sus propiedades. Para ello usaremos cuatro (4) funciones de introspección incorporadas en el código base de Python: type(), id(), repr(), dir() y help(). Funcionan de la siguiente manera:
type(): Esta función te informa qué tipo de objeto es el argumento que le proporcionas. Por ejemplo, si pasas una variable como argumento, la función identificará el objeto como una variable.id(): Cada objeto creado en Python tiene un identificador único que lo distingue dentro del código. Al pasar un objeto como argumento de esta función, se devolverá su identificador único.repr(): Convierte un valor que no es una cadena en una cadena, lo cual es útil para transformar los datos en una forma legible.dir(): Muestra todos los atributos que posee el objeto, lo que resulta útil para saber qué se puede lograr con un tipo de objeto específico.help(): Muestra toda la información disponible en el registro de Python sobre un objeto, función, clase, etc.
Además, tenemos una nueva función async llamada display(). Esta función es similar a la función read(), pero te permite mostrar datos dinámicos, al igual que las funciones de introspección de código que producen datos dinámicos. Su sintaxis es la siguiente: await player.dysplay( -data-). Todas estas funciones serán útiles para analizar datos, lo cual es beneficioso cuando utilizamos Métodos y comenzamos a importar nuevas funciones, así como para analizar cualquier código del que queramos identificar propiedades.
Utilizaremos estas funciones para identificar y catalogar los objetos almacenados en el ático. Para comenzar, dirígete a las marcas de X oscuras sobre las alfombras de colores, empezando por la que se encuentra sobre la alfombra roja. Hay tres (3) constantes en esta área: red_container, green_container y blue_container, las cuales representan contenedores en cada cofre, correspondientes a cada alfombra de color.
Por cada marca de X, enfrenta el cofre y utiliza la función open() para abrir los cofres; luego usa la función collect() con la constante correspondiente a la alfombra de color para recogerla del cofre. Utiliza la función de introspección type() para identificar qué tipo de constante se encuentra en el cofre; la salida que produce es datos sin procesar y, para ello, usamos la función repr() para convertirlos en una cadena. Usa la función speak() para mostrar la cadena resultante de combinar las funciones y la constante, por ejemplo: player.speak(repr(type(red_container))). Luego, utiliza la función speak() con la constante para identificar directamente el contenido, por ejemplo: player.speak(red_container).
Una vez que hayas recogido, introspectado e identificado las tres (3) constantes, dirígete a la marca de X clara frente al escritorio. Crea tres variables llamadas: item_id_red, item_id_green y item_id_blue; estas se utilizarán para almacenar los números de identificación de cada una de las constantes que has recogido. Utiliza la función de introspección id() para obtener el número de identificación único de la constante, pasándola como argumento. Asocia el nombre de la variable con el de la constante usando este formato de ejemplo: item_id_red = id(red_container), y haz lo mismo para las tres (3) variables y constantes.
Una vez que las tres (3) variables hayan sido asignadas, almacénalas todas en una lista llamada item_list y, en la marca de X clara, utiliza la función display() para asegurarte de que se anote en el memorando sobre la mesa, de esta forma: await player.display(item_list).
Ahora que se ha registrado la lista, dirígete a la marca de X oscura sobre la alfombra púrpura y enfréntate al escritorio. Aquí utilizaremos la función dir() para identificar qué atributos tiene la lista; sin embargo, la salida es datos sin procesar, lo que puede ser difícil de mostrar. Para ello, usamos la función repr() para transformar los datos en una cadena legible. Crea una variable llamada item_attributes y almacena la cadena resultante, de la siguiente manera: item_attributes = repr(dir(item_list)). Finalmente, utiliza la función display() para asegurarte de que se anote en el memorando sobre la mesa.
Dirígete a la marca de X oscura sobre la alfombra blanca para hacer lo mismo que hiciste con dir(), pero utilizando help(). Esto mostrará toda la documentación sobre el uso del objeto. Crea una variable llamada item_help y almacena la cadena resultante, de la siguiente manera: item_help = repr(help(item_list)). Finalmente, utiliza la función read() para asegurarte de que también se anote en el memorando sobre la mesa, completando así el nivel.