2008-09-30 177 views
1

当我打电话扩展功能和“帮助”

help(Mod.Cls.f) 

(国防部是一个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" } 

回答

2

你不能。检查模块是'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编写的函数。

+0

谢谢,但它为什么说method_descriptor,而不是方法和模块的名称? – 2008-09-30 14:30:05

1

托马斯的答案当然是对的。

我想简单地补充一下,许多C扩展模块都在它们周围有一个Python“包装器”,以便它们可以支持标准功能签名和其他动态语言功能(例如描述符协议)。