Я хочу передать структуру, содержащую структуры, в C в python, используя cpython.
//main.c
#include <Python.h>
struct properties {
struct position
double velocity;
}
struct position{
double rx;
double ry;
double rz;
}
struct velocity{
double vx;
double vy;
double vz;
}
void main(int argc, char** argv){
Py_Initialize();
struct properties pr;
position po = &pr.position;
velocity v = &pr.velocity;
_Py_fopen("f.py", "r+");
Py_Finalize();
}
#f.py
#import numpy as np
#pr = properties()
#po = pr.po
#v = pr.v
#poabs = np.abs(po.rx + po.ry + po.rz)
Как я могу манипулировать структурами в файле python?
Единственный способ, который я могу придумать, - это передать каждую переменную по отдельности,
//main.c
...
PyObject* rx = po.rx;
...
записать методы получения для каждой переменной в соответствии с https://docs.python.org/3/extending/embedding.html (1.4.)
//main.c
static PyObject* emb_getrx(PyObject *self, PyObject *rx)
{
return PyFloat_FromDouble(rx);
}
и встроить каждый метод получения
//main.c
static PyMethodDef EmbMethods[] = {
{"rx", emb_getrx, double, "Return rx."},
{NULL, NULL, 0, NULL}
};
static PyModuleDef EmbModule = {
PyModuleDef_HEAD_INIT, "emb", NULL, -1, EmbMethods,NULL, NULL, NULL, NULL
};
к import
#f.py
import emb
Реальный код содержит гораздо больше структур и переменных. Есть ли более простой способ?