PyObject
是 Python C API 中的一个基础类型,用于表示 Python 对象。在 C++ 中调用 Python 类方法需要通过 Python 的 C API 进行交互。这涉及到 Python 解释器的初始化、对象的创建和方法的调用。
以下是一个简单的示例,展示如何在 C++ 中调用 Python 类方法:
#include <Python.h>
int main(int argc, char *argv[]) {
// 初始化 Python 解释器
Py_Initialize();
// 导入 Python 模块
PyObject* pModule = PyImport_ImportModule("example_module");
if (!pModule) {
PyErr_Print();
fprintf(stderr, "Failed to load module\n");
return 1;
}
// 获取类对象
PyObject* pClass = PyObject_GetAttrString(pModule, "ExampleClass");
if (!pClass || !PyCallable_Check(pClass)) {
if (PyErr_Occurred()) PyErr_Print();
fprintf(stderr, "Cannot find function 'ExampleClass'\n");
return 1;
}
// 创建类的实例
PyObject* pInstance = PyObject_CallObject(pClass, nullptr);
if (!pInstance) {
PyErr_Print();
fprintf(stderr, "Failed to create instance\n");
return 1;
}
// 调用类的方法
PyObject* pResult = PyObject_CallMethod(pInstance, "example_method", nullptr);
if (pResult != nullptr) {
printf("Result of call: %ld\n", PyLong_AsLong(pResult));
Py_DECREF(pResult);
} else {
PyErr_Print();
fprintf(stderr, "Call failed\n");
return 1;
}
// 清理
Py_DECREF(pModule);
Py_DECREF(pClass);
Py_DECREF(pInstance);
Py_Finalize();
return 0;
}
通过以上步骤和示例代码,可以在 C++ 中成功调用 Python 类方法。
领取专属 10元无门槛券
手把手带您无忧上云