扩展功能和"帮助"

时间:2020-03-06 14:55:28  来源:igfitidea点击:

当我打电话

help(Mod.Cls.f)

(Mod是一个C扩展模块),我得到了输出

Help on method_descriptor:

f(...)
    doc_string

我需要怎么做才能使帮助输出具有以下形式:

Help on method f in module Mod:

f(x, y, z)
    doc_string

就像是random.Random.shuffle一样?

我的PyMethodDef条目当前为:

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

解决方案

你不能。 inspect模块是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"包装器",因此它们可以支持标准函数签名和其他动态语言功能(例如描述符协议)。