Python>>> Introspection

sebsauvage - 2 avril 2002 à 15:04
sebsauvage Messages postés 32893 Date d'inscription mercredi 29 août 2001 Statut Modérateur Dernière intervention 21 octobre 2019 -
L'un des points forts de Python, c'est sa possibilité d'introspection.

En plus de la documentation (au format HTML ou CHM), il est possible d'examiner pendant l'exécution d'un programme tous les objets Python, y compris leur documentation.


*** Par exemple, pour afficher la documentation d'une méthode:
>>> maliste = [2,5] # On créé une liste
>>> print maliste.append.__doc__
L.append(object) -- append object to end
>>> print maliste.insert.__doc__
L.insert(index, object) -- insert object before index


*** De quel type est l'objet maliste ?
>>> print type(maliste)
<type 'list'>


*** Pour afficher tous les attributs et méthodes d'un objet:
>>> print dir(maliste)
['__add__', '__class__', '__contains__', '__delattr__', '__delitem__', '__delslice__', '__eq__', '__ge__', '__getattribute__', '__getitem__', '__getslice__', '__gt__', '__hash__', '__iadd__', '__imul__', '__init__', '__le__', '__len__', '__lt__', '__mul__', '__ne__', '__new__', '__reduce__', '__repr__', '__rmul__', '__setattr__', '__setitem__', '__setslice__', '__str__', 'append', 'count', 'extend', 'index', 'insert', 'pop', 'remove', 'reverse', 'sort']


*** La même chose pour un fichier :
>>> fichier = open('toto.txt','w') # On ouvre un fichier en écriture
>>> print dir(fichier)
['__class__', '__delattr__', '__getattribute__', '__hash__', '__init__', '__iter__', '__new__', '__reduce__', '__repr__', '__setattr__', '__str__', 'close', 'closed', 'fileno', 'flush', 'isatty', 'mode', 'name', 'read', 'readinto', 'readline', 'readlines', 'seek', 'softspace', 'tell', 'truncate', 'write', 'writelines', 'xreadlines']
>>> print fichier.read.__doc__
read([size]) -> read at most size bytes, returned as a string.

If the size argument is negative or omitted, read until EOF is reached.



*** La liste de tous les objets courants (de notre session):

>>> print dir()
['__builtins__', '__doc__', '__name__', 'fichier', 'maliste']

__builtins__ contient toutes les méthodes standard (de base)
__doc__ contient la doc du module actuel (vide puisque nous sommes en train de créer un nouveau module)
__name__ contient le nom du module actuel (vide puisque nous ne lui avons pas donné de nom)

Et on y retrouve bien entendu maliste et fichier, les 2 objets que nous avons créé.


Cela nous donne la possibilité d'examiner le contenu (attributs et méthodes) de n'importe quel objet au moment de l'exécution, ainsi que tous les objets qu'il contient.

1 réponse

Fax Messages postés 164 Date d'inscription jeudi 1 avril 2004 Statut Contributeur Dernière intervention 16 novembre 2019 447
6 mai 2004 à 23:49
Document très intéressant !!!
Il mériterait une place dans la Base de connaissance CCM!


"A trop vouloir gagner, on finit par tout perdre..."
0
sebsauvage Messages postés 32893 Date d'inscription mercredi 29 août 2001 Statut Modérateur Dernière intervention 21 octobre 2019 15 663
7 mai 2004 à 10:05
merci :-)
0