问题描述
我正在使用Python 3 C API与一些Python代码进行交互。
我已经使用PyObject_Call
从C ++实例化了Python对象,并且能够使用PyObject_SetAttrString
修改了它的某些属性。我想修改的属性之一是回调函数,如何从我的C ++函数之一实例化Python对象?
解决方法
您需要做的是创建一个可调用的Python对象,当该对象被调用时,它最终会调用以C(或C ++)实现的函数。
我将实现Python Type Objects docs中指定的新类。它可以实现您可能需要的任何类型的构造函数等,但最重要的是,它应该实现tp_call
,它将使该类的实例可调用(就像有一个__call__
方法一样)。用Python实现)。
tp_call
的实现在C / C ++中,您可以创建此类的实例,这些实例是Python对象,可以传递给任何Python代码。