我在C中编写一个简单的Vector
实现作为Python扩展模块,看起来大概是这样的:
typedef struct {
PyObject_HEAD
double x;
double y;
} Vector;
static PyTypeObject Vector_Type = {
...
};
从Python调用时创建Vector
的实例非常简单,但我需要在同一个扩展模块中创建一个Vector
实例。我查看了文档但我找不到明确的答案。最好的方法是什么?
答案 0 :(得分:3)
最简单的方法是调用您创建的类型对象,例如使用PyObject_CallFunction - 不要让这个名字欺骗你,它可以让你调用任何可调用,不只是一个函数。
如果您没有方便地将类型对象引用作为C模块的全局static
,则可以通过各种方式检索它(例如,从带有{的模块对象中检索它{3}})。但是将PyObject*
粘贴到static
模块级C变量中可能是最简单和最方便的。