【问题标题】:Setting different doc string for functions of the same custom type defined with Python-C-API为使用 Python-C-API 定义的相同自定义类型的函数设置不同的文档字符串
【发布时间】:2014-07-28 20:38:29
【问题描述】:

我将 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 为每个包装函数返回的文档字符串?

【问题讨论】:

标签: python c python-3.x python-c-api


【解决方案1】:

当然有办法。只需遵循文档: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};

然后只需将YourMethods 包含在您的PyModuleDef 中,就是这样。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-06-18
    • 2017-07-23
    相关资源
    最近更新 更多