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 inspecterimporter 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 inspecterimporter 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 inspecterde 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 inspecterde 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 inspecterimporter 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 inspecterimporter 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 inspecterimporter 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 inspecterimporter 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.