Erweiterungsfunktionen und ‚Hilfe‘
Frage
Wenn ich rufe
help(Mod.Cls.f)
(Mod ist ein C-Erweiterungsmodul), erhalte ich die Ausgabe
Help on method_descriptor: f(...) doc_string
Was brauche ich, um so zu tun, dass die Hilfe Ausgabe des Formulars ist
Help on method f in module Mod: f(x, y, z) doc_string
, wie es ist für random.Random.shuffle zum Beispiel?
Mein PyMethodDef Eintrag ist zur Zeit:
{ "f", f, METH_VARARGS, "doc_string" }
Lösung
Sie können nicht. Das inspiziert Modul, das, was pydoc "und‚Hilfe ()‘verwendet wird, hat keine Möglichkeit, herauszufinden, was die genaue Signatur einer C-Funktion ist. Das Beste, was Sie tun können, ist, was die eingebauten Funktionen tun: zählen die Signatur in der ersten Zeile des docstring:
>>> help(range)
Help on built-in function range in module __builtin__:
range(...)
range([start,] stop[, step]) -> list of integers
...
Die docstring Vernunft random.shuffle sieht „richtig“ ist, dass es keine C-Funktion ist. Es ist eine Funktion in Python geschrieben.
Andere Tipps
Thomas Antwort ist richtig auf, natürlich.
Ich würde einfach hinzufügen, dass viel C Erweiterungsmodule eine Python „Wrapper“ um sie herum, so dass sie Standardfunktionssignaturen und andere dynamische Sprachfeatures (wie das Descriptor-Protokoll) unterstützen können.