Я пытаюсь запустить некоторые скрипты Python внутри кода C ++. Я достигаю точки, в которой мне нужно использовать свой собственный тип. я нашел статья в Python doc о создании пользовательских типов и хороший 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 () (то есть во время одного сеанса интерпретатора), должны автоматически отображаться для всех модулей, импортированных во время этого сеанса. Я ошибся?
Задача ещё не решена.
Других решений пока нет …