从C++扩展调用Python类方法

2024-03-28 22:12:40 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个python模块,名为my_module,其中我有一个名为my_class的类,而我的_类有一个名为my_method的类方法。在

根据其他我已经看到的例子,我已经尝试了以下尝试从C++调用MyOy方法,但目前它们都返回null(实际上是其中之一个……)

首先导入模块和类:

PyObject* my_module_name = PyString_FromString((char*)"my_module");
PyObject* myModule = PyImport_Import(my_module_name);

PyObject* my_class = PyObject_GetAttrString(myModule2, (char*)"my_class");
if (!my_class) std::cout << "my_class failed " << std::endl;

然后构建作为元组传入的参数:

^{pr2}$

然后我尝试调用实际的方法

PyObject* my_method = PyObject_GetAttrString(my_class,(char*)"my_method");
if (!my_method) std::cout << "failed " << std::endl;

// This returns NULL
PyObject* result_1 = PyObject_CallMethod(my_class, (char*)"my_method", "ssiib", my_args);
if (!result_1) std::cout << "failed result_1 " << std::endl;

// This returns NULL
PyObject* result_2 = PyObject_CallMethod(my_class, (char*)"my_method", "ssiib", my_args);
if (!result_2) std::cout << "failed result_2 " << std::endl;

// This returns NULL
PyObject* result_3 = PyObject_CallMethod(my_class, (char*)"my_method", "ssiib", "first string", "second string", 0.0, 1.0);
if (!result_3) std::cout << "failed result_3 " << std::endl;

// This one segfaults
PyObject* result_4 = PyObject_CallMethodObjArgs(my_class, my_method, my_args);
if (!result_4) std::cout << "failed result_4 " << std::endl;

// This returns NULL
PyObject* result_5 = PyObject_CallObject(my_method, my_args);
if (!result_5) std::cout << "failed result_5" << std::endl;

但是它们返回NULL,或者在尝试编号为4的情况下,返回segfault。在

我不知道下一步该做什么,所以如果有任何帮助我将不胜感激。在

干杯, 杰克


Tags: ifmyresultthisnullmethodclassreturns