我将python嵌入到一个C++应用程序中,并编写了一个函数包装器(就像boost::python一样)。为此,我创建了一个自定义python类型,定义了它的PyTypeObject结构并设置了一个tp_call函数指针。
这可以很好地工作,但现在我希望能够设置包装函数的文档。目前,当我在Python解释器中运行help(some_function)时,打印了一个通用文档。设置PyTypeObject结构的tp_doc没有任何帮助,因为它为所有包装的函数提供了相同的帮助字符串。
我也试着打电话给
PyObject_SetAttrString((PyObject*)a_wrapped_function, "__doc__", PyUnicode_FromString("some doc"))但是这个调用返回-1,这意味着失败(这个属性可能被认为是只读的)。
我考虑为每个包装的函数创建一个新的PyTypeObject,但我还没有尝试,因为我认为这可能是矫枉过正……
有没有一种很好的方法来告诉Python要为每个封装的函数返回的文档字符串?
发布于 2017-02-02 00:38:30
当然有一种方法。只需遵循文档:https://docs.python.org/3.5/c-api/structures.html#c.PyMethodDef
基本上你需要做的是:
static PyMethodDef YourMethods[] = {
{ "yourMethod", yourMethod, METH_NOARGS,
"Your docstring for the method/function." },
0};然后只需在PyModuleDef中包含YourMethods,就行了。
https://stackoverflow.com/questions/25003910
复制相似问题