Extension functions and 'help'
Question
When I call
help(Mod.Cls.f)
(Mod is a C extension module), I get the output
Help on method_descriptor: f(...) doc_string
What do I need to do so that the help output is of the form
Help on method f in module Mod: f(x, y, z) doc_string
like it is for random.Random.shuffle, for example?
My PyMethodDef entry is currently:
{ "f", f, METH_VARARGS, "doc_string" }
Solution
You cannot. The inspect module, which is what 'pydoc' and 'help()' use, has no way of figuring out what the exact signature of a C function is. The best you can do is what the builtin functions do: include the signature in the first line of the docstring:
>>> help(range)
Help on built-in function range in module __builtin__:
range(...)
range([start,] stop[, step]) -> list of integers
...
The reason random.shuffle's docstring looks "correct" is that it isn't a C function. It's a function written in Python.
OTHER TIPS
Thomas's answer is right on, of course.
I would simply add that many C extension modules have a Python "wrapper" around them so that they can support standard function signatures and other dynamic-language features (such as the descriptor protocol).