我尝试从C ++代码中运行一些Python脚本。我达到了这一点,我需要使用我的自定义类型。我找到article in Python doc关于创建自定义类型和nice SOQ,解释了如何在C ++端创建自定义类型的实例。
但是,我不确定如何在Python中使用此类型。在doc示例中,定义了“模块初始值设定项”:
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()之后创建的类型(因此,在单个解释器会话期间)应该对在此会话期间导入的所有模块自动可见。我错了吗?