Curso Avançado de Desenvolvimento Python
Capítulo
>
Nível
Módulos Matemáticos
Introspecção de Código
Objetivo
Inspecione alguns itens antigos guardados no sótão usando a introspecção de código para descobrir o que eles são e como são usados.
O sótão possui um escritório raramente usado e há alguns baús antigos contendo alguns objetos de valor que foram esquecidos há muito tempo. A menos que seja indicado de outra forma ou que um memorando forneça a informação, às vezes pode ser bastante difícil identificar itens, ou constantes coletadas no campo. Além disso, pode ser difícil identificar a gama de coisas que você pode realizar com um objeto específico ou quais são suas propriedades. Para resolver isso, podemos usar a Introspecção de Código.
A Introspecção de Código nos permite inspecionar e identificar certos trechos de código e indicar algumas de suas propriedades. Para isso, usaremos quatro (4) funções de introspecção integradas fornecidas com o código base do Python: type() , id() , repr() , dir() e help() . Elas funcionam da seguinte maneira:
type(): A função informa qual é o tipo de objeto do argumento fornecido. Por exemplo, se você passar uma variável como argumento, a função identificará o objeto como uma variável.id(): Todo objeto criado no Python possui um id único que o identifica dentro do código. Ao passar um objeto como argumento desta função, ela retornará o id único do objeto.repr(): Converte um valor que não é uma string em uma string, sendo útil para converter dados em um formato legível.dir(): Exibe todos os atributos que o objeto possui, sendo útil para saber o que pode ser alcançado por um tipo específico de objeto.help(): Exibe todas as informações disponíveis sobre um determinado objeto, função, classe etc., que estão registradas no Python.
Além disso, temos uma nova função assíncrona, a função display(). Essa função é semelhante à função read(), mas permite que você exiba dados dinâmicos, assim como as funções de introspecção de código que produzem dados dinâmicos. Sua sintaxe é a seguinte: await player.display( -data-) . Todas essas funções serão úteis para analisar dados; isso é importante para quando usarmos métodos e começarmos a importar novas funções, bem como para analisar qualquer código do qual queremos identificar propriedades.
Usaremos essas funções para identificar e catalogar os itens armazenados no sótão. Para começar, caminhe até a marca X escura sobre os tapetes coloridos, começando pelo tapete vermelho. Há três (3) constantes nesta área: red_container , green_container e blue_container, essas constantes representam os contêineres em cada baú correspondentes a cada tapete colorido.
Para cada marca X, vire-se para o baú e use a função open() para abrir os baús, utilize a função collect() com a constante do tapete colorido correspondente para retirá-lo do baú. Use a função de introspecção type() para identificar qual é o tipo da constante presente no baú; a saída que ela produz é um dado bruto e, para isso, usamos a função repr() para convertê-lo em uma string. Use a função speak() para exibir a string resultante da combinação das funções e da constante, por exemplo: player.speak(repr(type(red_container))) . Em seguida, use a função speak() com a constante para identificar o conteúdo diretamente, por exemplo: player.speak(red_container) .
Depois que as três (3) constantes forem coletadas, introspectadas e identificadas, caminhe até a marca X clara em frente à mesa. Crie três variáveis chamadas: item_id_red , item_id_green e item_id_blue, que serão usadas para armazenar os números de identificação de cada uma das constantes que você coletou. Utilize a função de introspecção id() para obter o número de identificação único da constante, passando-a como argumento. Combine o nome da variável com o nome da constante usando este formato como exemplo: item_id_red = id(red_container) , e faça isso para todas as três (3) variáveis e constantes.
Depois que todas as três (3) variáveis forem preenchidas, armazene-as em uma lista chamada item_list e, na marca X clara, utilize a função display() para garantir que esteja anotado no memorando sobre a mesa, assim: await player.display(item_list) .
Agora que a lista foi registrada, caminhe até a marca X escura sobre o tapete roxo e vire-se para a mesa. Aqui, vamos utilizar a função dir() para identificar quais atributos a lista possui, no entanto, a saída é um dado bruto que pode ser complicado de exibir. Para isso, usamos a função repr() para transformar os dados em uma string legível. Crie uma variável chamada item_attributes e armazene a string resultante, assim: item_attributes = repr(dir(item_list)). Por fim, utilize a função display() para garantir que esteja anotada no memorando sobre a mesa.
Caminhe até a marca X escura sobre o tapete branco para realizar o mesmo procedimento feito com a dir(), mas utilizando help(), que irá delinear toda a documentação de uso do objeto. Crie uma variável chamada item_help e armazene a string resultante, assim: item_help = repr(help(item_list)). Por fim, utilize a função read() para garantir que também esteja anotada no memorando sobre a mesa, a fim de completar o nível.