我尝试从 C++ 代码中运行一些 Python 脚本。我达到了需要使用自定义类型的地步。我在 Python 文档中找到了关于创建自定义类型和不错的 SOQ的文章,解释了如何在 C++ 端创建自定义类型的实例。
但是,我不确定如何在 Python 中使用这种类型。在文档示例中,定义了一个“模块初始化程序”:
PyMODINIT_FUNC PyInit_module_type(void)
{
CX_type.tp_new = PyType_GenericNew;
if (PyType_Ready(&CX_type) < 0)
return NULL;
//create module, return it
}
但是没有提示这个函数的目的是什么。如何(以及何时)调用此函数?
目前,我通过 PyEval_EvalCode() 运行我的脚本来运行整个脚本或 PyObject_Call() 来运行特定的功能。在这两种情况下如何使用我的类型?我需要先以某种方式导入它吗?
如果我将脚本作为模块导入:
PyObject* pm_1 = PyImport_Import("pm_1.py")
我是否需要将我的类型添加到我以这种方式创建的每个模块中:
Py_INCREF(&CX_type);
PyModule_AddObject(pm_1, "CX", (PyObject*)&CX_type);
? 我认为,在 Py_Initialize() 之后创建的类型(因此,在单个解释器会话期间)应该对该会话期间导入的所有模块自动可见。我错了吗?