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" }
Était-ce utile?

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).

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top