2008-09-30 2 views
1

Wenn ich rufeErweiterungsfunktionen und ‚Hilfe‘

help(Mod.Cls.f) 

(Mod ist ein C-Erweiterungsmodul), erhalte ich die Ausgabe

Help on method_descriptor: 

f(...) 
    doc_string

Was ich tun, so tun müssen, dass die Hilfe Ausgabe ist der Form

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 derzeit:

{ "f", f, METH_VARARGS, "doc_string" } 

Antwort

2

Sie können nicht. Das inspect-Modul, das "pydoc" und "help()" verwenden, hat keine Möglichkeit herauszufinden, was genau die 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 

... 

Der docstring Vernunft random.shuffle sieht „richtig“ ist, dass es keine C-Funktion ist. Es ist eine in Python geschriebene Funktion.

+0

Danke, aber warum heißt es method_descriptor anstatt den Namen der Methode und des Moduls? –

+0

Weil das Python das Objekt denkt - weil es das ist. Siehe 'help (list.append)' und Sie werden dasselbe sehen. –

+0

Ah, ich sehe ... help (list.sort) macht genau das gleiche. Wenn es für list.sort gut genug ist, ist es gut genug für mich :-) –

1

Thomas 'Antwort ist natürlich richtig.

Ich würde einfach hinzufügen, dass viele C-Erweiterungsmodule einen Python "Wrapper" um sie herum haben, so dass sie Standardfunktionssignaturen und andere dynamische Sprachmerkmale (wie das Deskriptorprotokoll) unterstützen können.

Verwandte Themen