当我打电话
help(Mod.Cls.f)
(Mod 是一个 C 扩展模块),我得到了输出
关于method_descriptor的帮助: F(...) 文档字符串
我需要做什么才能使帮助输出具有以下形式
模块 Mod 中方法 f 的帮助: f(x, y, z) 文档字符串
例如,就像 random.Random.shuffle 一样?
我的 PyMethodDef 条目当前是:
{ "f", f, METH_VARARGS, "doc_string" }
你不能。'pydoc' 和 'help()' 使用的检查模块无法弄清楚 C 函数的确切签名是什么。你能做的最好的就是内置函数的作用:在文档字符串的第一行包含签名:
>>> help(range)
Help on built-in function range in module __builtin__:
range(...)
range([start,] stop[, step]) -> list of integers
...
random.shuffle 的文档字符串看起来“正确”的原因是它不是 C 函数。这是一个用 Python 编写的函数。
当然,托马斯的回答是对的。
我只想补充一点,许多 C 扩展模块在它们周围都有一个 Python“包装器”,这样它们就可以支持标准函数签名和其他动态语言特性(例如描述符协议)。