1

I'm embedding python in a C++ application and wrote a function wrapper (like boost::python does). To achieve this, I created a custom python type and defined its PyTypeObject structure and set a tp_call function pointer.

This works fine, but now I would like to be able to set the documentation of the wrapped functions. For the moment, when I run help(some_function) in the Python interpreter, a generic documentation is printed. Setting tp_doc of the PyTypeObject structure doesn't help since it provides the same help string for all the wrapped functions.

I also tried to call

PyObject_SetAttrString((PyObject*)a_wrapped_function, "__doc__", PyUnicode_FromString("some doc"))

but this call returns -1, which means failure (this attribute is probably considered read-only).

I considered creating a new PyTypeObject for each wrapped function, but I didn't tried yet since I think this may be overkill...

Is there a nice way to tell Python the doc string to be returned for each wrapped function ?

1

1 Answer 1

1

Of course there is a way. Just follow the documentation: https://docs.python.org/3.5/c-api/structures.html#c.PyMethodDef

Basically what you need to do is this:

static PyMethodDef YourMethods[] = {
  { "yourMethod", yourMethod, METH_NOARGS, 
    "Your docstring for the method/function." },
   0};

And then just include YourMethods in your PyModuleDef, and that's it.

Sign up to request clarification or add additional context in comments.

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.