如何使用原生Python/C API从C++创建Python自定义类型?
下面是解释内容:
我定义了一个新的Python类型,叫做“Ex1”。
typedef struct {
PyObject_HEAD
PyObject * int_id;
int * value;
} Ex1;
考虑到这个类型,并且在Python中生成并验证了所有适当的方法(运行得相当不错)。我想从C++后端创建一个新的Ex1类型的Python对象。我需要的典型结构是:
int main
{
// Create Ex1 Object.
Ex1 Example;
// Call PythonC-API method to include Ex1 Object into the python interpreter.
// ¿Any function-method from Python API to perform this task?
}
1 个回答
2
其实我通过查阅Python的文档解决了这个问题:
https://docs.python.org/2/extending/newtypes.html
首先,需要按照Python文档中的说明定义合适的方法(1)。假设创建的PyType有两个属性(varp1和varp2):
PyObject * create_Ex1(vartype1 var1, vartype2 var2)
{
PyObject * pInst = PyObject_CallObject((PyObject *)&Ex1Type, NULL);
((Ex1*)pInst)->varp1 = var1;
((Ex1*)pInst)->varp2 = var2;
return pInst;
}
还有
static int Ex1_init(Ex1 *self, PyObject *args, PyObject *kwds)
{
// On init return -1 if error
self->varp1= NULL;
self->varp2= NULL;
return 0;
};
这些是在静态的PyTypeObject Ex1Type中定义的,具体内容可以参考Python文档(1)。
然后,使用这一行代码来创建和初始化对象:
PyObject* Ex1_obj = create_Ex1(var1, var2);