Fonctions d'extension et 'aide'
Question
Quand j'appelle
help(Mod.Cls.f)
(Mod est un module d'extension C), je reçois la sortie
Help on method_descriptor: f(...) doc_string
Que dois-je faire pour que la sortie de l'aide soit de la forme
Help on method f in module Mod: f(x, y, z) doc_string
comme pour random.Random.shuffle, par exemple?
Mon entrée PyMethodDef est actuellement:
{ "f", f, METH_VARARGS, "doc_string" }
La solution
Vous ne pouvez pas. Le module inspect, utilisé par pydoc et help (), n'a aucun moyen de déterminer la signature exacte d'une fonction C. Le mieux que vous puissiez faire est ce que font les fonctions intégrées: incluez la signature dans la première ligne de la docstring:
>>> help(range)
Help on built-in function range in module __builtin__:
range(...)
range([start,] stop[, step]) -> list of integers
...
La raison pour laquelle docstring de random.shuffle a l’air "correct" est-ce que ce n'est pas une fonction C. C'est une fonction écrite en Python.
Autres conseils
La réponse de Thomas est bien sur, bien sûr.
J'ajouterais simplement que beaucoup de modules d'extension C ont un "wrapper" " Python autour d'eux afin qu'ils puissent prendre en charge les signatures de fonction standard et d'autres fonctionnalités de langage dynamique (telles que le protocole de descripteur).