Cours avancé de développement Python
Chapitre
>
Niveau
Modules mathématiques
Introspection du code
Objectif
Inspectez quelques vieux objets rangés dans le grenier en utilisant l'introspection de code pour découvrir ce qu'ils sont et comment ils sont utilisés.
Le grenier possède un bureau rarement utilisé et il y a quelques vieux coffres contenant des objets de valeur depuis longtemps oubliés. Sauf indication contraire ou sauf si une note fournit l'info, il peut parfois être assez difficile d'identifier les objets, ou les constantes rassemblées sur le terrain. De plus, il peut être difficile d'identifier l'éventail de choses que vous pouvez accomplir avec un objet spécifique ou quelles en sont ses propriétés. Pour y remédier, nous pouvons utiliser l'introspection de code.
L'introspection de code nous permet d'inspecter et d'identifier certains fragments de code et d'indiquer certaines de leurs propriétés. Pour cela, nous utiliserons quatre (4) fonctions d'introspection intégrées fournies avec le code de base de Python : type(), id(), repr(), dir() et help(). Elles fonctionnent comme suit :
type(): La fonction vous informe du type d'objet que représente l'argument que vous lui passez. Par exemple, si vous passez une variable en argument, la fonction identifiera l'objet comme étant une variable.id(): Chaque objet créé en Python possède un identifiant unique qui le distingue dans le code. En passant un objet en argument à cette fonction, elle renverra l'identifiant unique de cet objet.repr(): Convertit une valeur non chaîne en une chaîne, ce qui est utile pour transformer des données en une forme lisible.dir(): Affiche tous les attributs que possède l'objet, ce qui est utile pour savoir ce que l'on peut accomplir avec un certain type d'objet.help(): Affiche toutes les informations disponibles sur un objet, une fonction, une classe, etc. dans le registre de Python.
De plus, nous disposons d'une nouvelle fonction asynchrone qui est la fonction display(). Cette fonction est similaire à la fonction read(), mais elle vous permet d'afficher des données dynamiques, tout comme les fonctions d'introspection de code qui produisent des données dynamiques. Sa syntaxe est la suivante : await player.display( -data-). Toutes ces fonctions seront utiles pour analyser des données, ce qui est utile lorsque nous utilisons des méthodes et commençons à importer de nouvelles fonctions ainsi que pour analyser tout code dont nous voulons identifier les propriétés.
Nous utiliserons ces fonctions afin d'identifier et de cataloguer les objets stockés dans le grenier. Pour commencer, rendez-vous vers le X sombre situé sur les tapis colorés en commençant par celui sur le tapis rouge. Il y a trois (3) constantes dans cette zone : red_container, green_container et blue_container. Ces constantes représentent les conteneurs dans chaque coffre correspondant à chaque tapis de couleur.
Pour chaque X, faites face au coffre et utilisez la fonction open() pour ouvrir les coffres, utilisez la fonction collect() avec la constante correspondant au tapis de couleur pour la récupérer dans le coffre. Utilisez la fonction d'introspection type() pour identifier le type de constante présent dans le coffre ; la sortie produite est une donnée brute et, pour cela, nous utilisons la fonction repr() pour la convertir en chaîne de caractères. Utilisez la fonction speak() pour afficher la chaîne résultante en combinant les fonctions et la constante, par exemple : player.speak(repr(type(red_container))). Ensuite, utilisez la fonction speak() avec la constante pour identifier directement le contenu, par exemple : player.speak(red_container).
Une fois les trois (3) constantes collectées, introspectées et identifiées, rendez-vous vers le X clair situé devant le bureau. Créez trois variables nommées : item_id_red, item_id_green, item_id_blue. Elles serviront à stocker les numéros d'identification de chacune des constantes que vous avez collectées. Utilisez la fonction d'introspection id() pour obtenir le numéro d'identification unique de la constante en la passant en argument. Associez le nom de la variable avec le nom de la constante en utilisant ce format par exemple : item_id_red = id(red_container). Faites ceci pour les trois (3) variables et constantes.
Une fois les trois (3) variables remplies, stockez-les toutes dans une liste nommée item_list et, sur le X clair, utilisez la fonction display() pour vous assurer que cela est noté sur la note posée sur la table, comme ceci : await player.display(item_list).
Maintenant que la liste a été consignée, rendez-vous vers le X sombre situé sur le tapis violet et faites face au bureau. Ici, nous allons utiliser la fonction dir() pour identifier quels attributs la liste possède ; cependant, la sortie est une donnée brute qui peut être difficile à afficher. Pour cela, nous utilisons la fonction repr() pour transformer les données en une chaîne lisible. Créez une variable nommée item_attributes et stockez la chaîne résultante, comme ceci : item_attributes = repr(dir(item_list)). Enfin, utilisez la fonction display() pour vous assurer que cela est noté sur la note posée sur la table.
Rendez-vous vers le X sombre situé sur le tapis blanc pour faire la même opération que celle effectuée avec dir(), mais avec help(). Cela affichera toute la documentation d'utilisation de l'objet. Créez une variable nommée item_help et stockez la chaîne résultante, comme ceci : item_help = repr(help(item_list)). Enfin, utilisez la fonction read() pour vous assurer que cela est également noté sur la note posée sur la table afin de compléter le niveau.