如何将 C++ 函数作为回调传递给 Python?

How to pass C++ function as callback to Python?

我正在使用 Python 3 C API 与一些 Python 代码进行交互。

我已经使用 PyObject_Call 从 C++ 中实例化了一个 Python 对象,并且我已经能够使用 PyObject_SetAttrString 修改它的一些属性。我想修改的属性之一是回调函数,如何从我的 C++ 函数之一实例化 Python 对象?

你需要做的是创建一个可调用的Python对象,当它被调用时,它最终会调用一个用C(或C++)实现的函数。

我将实现一个新的 class,如 Python Type Objects docs. It may implement any kind of constructor etc. you may need, but most importantly for this purpose, it should implement the tp_call, which will make instances of this class callable (as if there was a __call__ 中指定的 Python 方法)。

tp_call 的实现在 C/C++ 中,您可以创建此 class 的实例,它们是 Python 对象并且可以传递给任何 Python代码。

另请参阅:Defining Extension Types: Tutorial