我正在编写C扩展,我想让我的方法的签名可见为内省.
static PyObject* foo(PyObject *self, PyObject *args) {
/* blabla [...] */
}
PyDoc_STRVAR(
foo_doc,
"Great example function\n"
"Arguments: (timeout, flags=None)\n"
"Doc blahblah doc doc doc.");
static PyMethodDef methods[] = {
{"foo", foo, METH_VARARGS, foo_doc},
{NULL},
};
PyMODINIT_FUNC init_myexample(void) {
(void) Py_InitModule3("_myexample", methods, "a simple example module");
}
现在,如果(在构建它之后……)我加载模块并查看它的帮助:
>>> import _myexample
>>> help(_myexample)
我会得到:
Help on module _myexample:
NAME
_myexample - a simple example module
FILE
/path/to/module/_myexample.so
FUNCTIONS
foo(...)
Great example function
Arguments: (timeout, flags=None)
Doc blahblah doc doc doc.
我想更具体,能够用foo替换foo(…)(超时,标志=无)
我可以这样做吗?怎么样?
解决方法:
我通常的方法是找出这样的事情:“使用源”.
基本上,我认为python的标准模块在可用时会使用这样的功能.查看源代码(for example here)应该有所帮助,但实际上即使是标准模块也会在自动输出后添加原型.像这样:
torsten@pulsar:~$python2.6 >>> import fcntl >>> help(fcntl.flock) flock(...) flock(fd, operation) Perform the lock operation op on file descriptor fd. See the Unix [...]
因为上游没有使用这样的功能,我认为它不存在.