Я пытаюсь использовать Python 3.5 C API для выполнения некоторого кода, который включает создание учебный класс. В частности это:
class MyClass:
def test(self):
print('test')
MyClass().test()
Проблема у меня в том, что это ошибки, как это:
Traceback (most recent call last):
File "<string>", line 1, in <module>
NameError: __build_class__ not found
Итак, каким-то образом мне нужно, чтобы мой модуль включал __build_class__
, но я не уверен, как это сделать (думаю, я бы также пропустил другие вещи, которые вы получаете по умолчанию при использовании Python тоже) - есть ли способ включить все эти встроенные функции в мой модуль?
Вот мой код:
#include <Python.h>
int main(void)
{
int ret = 0;
PyObject *pValue, *pModule, *pGlobal, *pLocal;
Py_Initialize();
pGlobal = PyDict_New();
pModule = PyModule_New("mymod");
pLocal = PyModule_GetDict(pModule);
pValue = PyRun_String(
"class MyClass:\n\tdef test(self):\n\t\tprint('test')\n\nMyClass().test()",
Py_file_input,
pGlobal,
pLocal);
if (pValue == NULL) {
if (PyErr_Occurred()) {
PyErr_Print();
}
ret = 1;
} else {
Py_DECREF(pValue);
}
Py_Finalize();
return ret;
}
так что pValue
это NULL
и он звонит PyErr_Print
.