Python

module d'inspection Python

module d'inspection Python

Aperçu

Vous êtes-vous déjà demandé à quel point ce serait cool d'avoir le pouvoir d'obtenir le code source d'un autre module Python dans votre propre programme? Cela ouvrira des idées et des portes sur de nombreuses opportunités telles que le traitement du code source d'un module, l'obtention de sa docstring, la production automatique de documentation pour un morceau de code. Laissez-moi vous dire, c'est 100% possible avec Python inspecter module.

module d'inspection Python

Python inspecter module nous permet d'inspecter les objets d'un programme en cours d'exécution, d'obtenir le code source d'un module, d'obtenir la docstring associée à ce module, de lire la signature de méthode d'une fonction en Python et bien plus encore. De cette façon, nous pouvons construire des projets qui produisent une documentation de code en direct pour nos propres projets. Cela signifie que nous n'avons qu'à faire les commentaires nécessaires sur notre code Python et nous pouvons laisser le reste du travail à Python lui-même pour produire la documentation pour nous.

Utilisation d'un exemple de code

Pour comprendre comment Python inspecter module fonctionne, nous utiliserons l'un de nos propres exemples de définition de code en Python qui montre simplement l'héritage en Python et comment les objets sont créés. Regardons l'exemple de module que nous utiliserons dans le reste du didacticiel ici :

def module_level_function(arg1, arg2 = 'default', *args):
"""Je suis une fonction au niveau du module."""
var_locale = arg1 * 2
retourner local_var
classe Personne(objet):
"""Définition de la classe Personne."""
def __init__(soi, nom):
soi.nom = nom
def get_name(self):
"Renvoie le nom de l'instance."
retourner soi-même.Nom
person_obj = Personne('exemple_instance')
classe Étudiant (Personne):
"""Ceci est la classe Etudiant, enfant de la classe Personne.
"""
# Cette méthode ne fait pas partie de la classe Person.
def do_something_else(self):
"""Tout peut être fait ici."""
def get_name(self):
"Remplace la version de la classe Person"
return 'Étudiant(' + soi.nom + ')'

Nous avons défini un exemple de module afin que nous puissions commencer à extraire le code source et d'autres composants dans les exemples ultérieurs que nous écrirons. Commençons.

Module d'inspection

Le module Python ci-dessus est enregistré dans un fichier appelé astuce linux.py dans le même répertoire où nous allons faire nos nouveaux scripts Python. Nous pouvons inspecter un module en Python en effectuant d'abord une importation pour lui. Cette déclaration d'importation sera également présente dans tous les scripts que nous écrirons dans les sections ultérieures. Voici un exemple de programme avec lequel nous inspectons notre module :

importation inspecter
importer linuxhint
pour le nom, les données dans inspecter.getmembers(linuxhint):
si nom.commence avec('__'):
Continuez
imprimer(' : !r'.format(nom, données))

Voici ce que nous obtenons avec cette commande :

module d'inspection Python


La sortie nous fournit les détails sur le nombre de classes, fonctions et objets existant dans ce module lorsque le script est exécuté.

Inspecter les classes dans un module

L'exemple ci-dessus que nous avons montré présentait tous les détails d'un module à la fois. si nous voulons obtenir uniquement les informations relatives aux classes du module, nous pouvons obtenir la même chose que :

importation inspecter
importer linuxhint
pour la clé, les données dans inspecter.getmembers(linuxhint, inspecter.isclass):
imprimer(' : !r'.format (clé, données))

Voyons le résultat de cette commande :

Python inspecter la classe de module


La sortie est exactement la même, sauf que cette fois, seules les définitions de classe ont été imprimées sur la console.

Inspecter les méthodes dans une classe

Les méthodes sont celles qui définissent le comportement d'une classe dans les POO et fournissent des informations sur la façon dont un comportement d'objets sera modifié lorsque les méthodes sont appelées. C'est pour cette raison qu'il est important de documenter toutes les méthodes qui existent dans une classe ou un module. Nous pouvons obtenir des informations liées à une méthode comme celle-ci :

importation inspecter
de pprint importer pprint
importer linuxhint
pprint(inspecter.getmembers(linuxhint.Personne, inspecter.isfonction))

Voici ce que nous obtenons avec cette commande :

Inspecter une méthode de classe


La sortie affiche simplement la définition de méthode de chaque méthode présente.

Inspecter les objets d'une classe

Lorsque vous examinez l'espace occupé lorsque nous exécutons un script Python, il est important de savoir combien d'objets de la classe sont instanciés pour la classe dans un programme. Pour le savoir, nous pouvons également obtenir des informations sur les objets d'une classe dans un module :

importation inspecter
de pprint importer pprint
importer linuxhint
personne = linuxhint.Personne(nom='inspect_getmembers')
pprint(inspecter.getmembers(personne, inspecter.isméthode))

Voyons le résultat de cette commande :

Inspection des objets de classe


Cela imprime également l'adresse mémoire où cet objet réside au cours de ce programme.

Inspecter la Docstring d'une classe

La docstring d'un module est la partie qui informe réellement un utilisateur ou un développeur de l'objet de ce module et des fonctionnalités qu'il fournit. Avec le module inspect, nous pouvons obtenir la docstring d'un module complet pour mieux le documenter. Voyons comment nous pouvons extraire la docstring pour une classe :

importation inspecter
importer linuxhint
print('Personne.__doc__ :')
imprimer (linuxhint.Personne.__doc__)
imprimer()
print('getdoc(Person):')
imprimer (inspecter.getdoc(linuxhint.Personne))

Voici ce que nous obtenons avec cette commande :

Obtenir Docstring pour la classe

Inspecter la source d'une classe

Enfin, nous pouvons voir comment nous pouvons également extraire le code source complet d'une classe dans un programme Python. C'est une fonctionnalité importante et cela nous aide à créer des outils de documentation sur un module Python. Voyons un exemple en action :

importation inspecter
importer linuxhint
imprimer (inspecter.getsource(linuxhint.Élève))

Voici ce que nous obtenons avec cette commande :

Obtenir le code source de la classe

Inspecter la source d'une méthode

De la même manière que nous avons extrait le code source d'une classe, nous allons maintenant extraire le code source d'une méthode dans notre programme Python :

importation inspecter
importer linuxhint
imprimer (inspecter.getsource(linuxhint.Élève.get_name))

Voici ce que nous obtenons avec cette commande :

Obtenir la source de la méthode dans une classe

Signature de la méthode d'inspection

La signature d'une méthode fournit un aperçu approfondi de ce qu'une méthode fait et de l'apport nécessaire. Cela nous donne le pouvoir de mieux documenter une méthode car la documentation d'une méthode est incomplète sans savoir quelle entrée cela prend. Voici comment nous pouvons extraire les informations liées à une signature de méthode :

importation inspecter
importer linuxhint
imprimer (inspecter.signature(linuxhint.module_level_function))

Voici ce que nous obtenons avec cette commande :

Obtenir la signature d'une méthode

Conclusion

Dans cette leçon, nous avons vu comment utiliser le module d'inspection Python pour examiner le code source et de nombreuses autres fonctionnalités internes d'un programme Python. Lisez plus de messages basés sur Python ici.

Installez le dernier jeu de stratégie OpenRA sur Ubuntu Linux
OpenRA est un moteur de jeu de stratégie en temps réel libre/gratuit qui recrée les premiers jeux Westwood comme le classique Command & Conquer: Red A...
Installez le dernier émulateur Dolphin pour Gamecube et Wii sur Linux
L'émulateur Dolphin vous permet de jouer aux jeux Gamecube et Wii de votre choix sur des ordinateurs personnels Linux (PC). Étant un émulateur de jeu...
Comment utiliser le moteur de triche GameConqueror sous Linux
L'article couvre un guide sur l'utilisation du moteur de triche GameConqueror sous Linux. De nombreux utilisateurs qui jouent à des jeux sur Windows u...