L'une des grandes choses de python est la possibilité d'avoir une introspection sur les méthodes et les fonctions. Par exemple, pour obtenir la signature de fonction de math.log
, vous pouvez (en ipython) exécuter ceci:
In [1]: math.log?
Type: builtin_function_or_method
Base Class: <type 'builtin_function_or_method'>
String Form: <built-in function log>
Namespace: Interactive
Docstring:
log(x[, base])
Return the logarithm of x to the given base.
If the base not specified, returns the natural logarithm (base e) of x.
Et voyez que x
et éventuellement base
sont les paramètres de cette fonction.
Avec le nouveau gtk3 et les liaisons de pygobject générées automatiquement, je peux dans tous les exemples que j'ai essayé de ne jamais obtenir {{ X0}} comme paramètres de chaque méthode gtk.
Exemple: Label.set_text qui nécessite une chaîne:
In [1]: from gi.repository import Gtk
In [2]: mylabel = Gtk.Label("hello")
In [3]: mylabel.set_text?
Type: instancemethod
Base Class: <type 'instancemethod'>
String Form: <bound method Label.set_text of <Label object at 0x275b230 (GtkLabel at 0x28cd040)>>
Namespace: Interactive
File: /usr/lib/python2.7/dist-packages/gi/types.py
Definition: L.set_text(*args, **kwargs)
Docstring:
<no docstring>
MAINTENANT LA QUESTION: est-ce (la perte de l'introspection des méthodes pour les liaisons python) que quelque chose va changer encore une fois (la documentation) l'effort est allé dans les pygobjects ou est-ce quelque chose qui est là pour rester en raison de la façon dont les pygobjects fonctionnent?
3 réponses
Pour l'instant, je pense que ce n'est pas encore prêt. Cependant, vous pouvez toujours effectuer une introspection manuelle en regardant le fichier Gtk-3.0.gir
(dans mon système situé dans /usr/share/gir-1.0/Gtk-3.0.gir
).
Le fichier gir est juste un fichier xml qui est censé être utilisé exactement pour explorer l'interface exposée quel que soit le langage de programmation que vous utilisez. Par exemple, la classe Label
peut être trouvée à la recherche de <class name="Label"
. La balise class
contient une balise doc
contenant des informations détaillées sur ce que ce widget est censé faire. Il existe également de nombreuses method
balises et l'une d'elles est celle qui vous intéresse, par exemple: <method name="set_text"
. À l'intérieur de cette balise method
, il y a non seulement une balise doc
qui décrit la méthode, mais également une balise parameters
qui, à son tour, contient des balises parameter
qui sont utilisées pour décrire chaque paramètre en termes de nom, description et type:
<parameters>
<parameter name="str" transfer-ownership="none">
<doc xml:whitespace="preserve">The text you want to set</doc>
<type name="utf8" c:type="gchar*"/>
</parameter>
</parameters>
Donc, toutes les informations sont déjà là.
Je crois que ce serait la façon dont l'API C pour créer des modules python le fait. Par exemple:
>>> import inspect
>>> inspect.getargspec(math.log)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "C:\Python27\lib\inspect.py", line 813, in getargspec
raise TypeError('{!r} is not a Python function'.format(func))
TypeError: <built-in function log> is not a Python function
La seule façon (à ma connaissance) est de regarder les paramètres de méthode pour les fonctions intégrées est de regarder la chaîne doc.
>>> help(math.log)
Help on built-in function log in module math:
log(...)
log(x[, base])
Return the logarithm of x to the given base.
If the base not specified, returns the natural logarithm (base e) of x.
J'ai écrit mon propre module C python, et j'ai cherché des moyens de "corriger" le (...) et la solution de contournement est de le placer dans la chaîne de doc que je considère sujette aux erreurs car je devrais mettre à jour le doc chaîne chaque fois que je change la fonction.
Vous pouvez utiliser une autre fonction intégrée comme dir (), vars (), etc.
http://docs.python.org/library/functions.html
Un autre outil utile est pydoc:
pydoc gi.repository.Gtk
Questions connexes
De nouvelles questions
python
Python est un langage de programmation multi-paradigme, typé dynamiquement et polyvalent. Il est conçu pour être rapide à apprendre, comprendre, utiliser et appliquer une syntaxe propre et uniforme. Veuillez noter que Python 2 est officiellement hors support à partir du 01-01-2020. Néanmoins, pour les questions Python spécifiques à la version, ajoutez la balise [python-2.7] ou [python-3.x]. Lorsque vous utilisez une variante Python (par exemple, Jython, PyPy) ou une bibliothèque (par exemple, Pandas et NumPy), veuillez l'inclure dans les balises.