在C中创建Python扩展类型的实例

时间:2010-04-03 23:38:43

标签: python extension-modules

我在C中编写一个简单的Vector实现作为Python扩展模块,看起来大概是这样的:

typedef struct {
    PyObject_HEAD
    double x;
    double y;
} Vector;

static PyTypeObject Vector_Type = {
    ...
};

从Python调用时创建Vector的实例非常简单,但我需要在同一个扩展模块中创建一个Vector实例。我查看了文档但我找不到明确的答案。最好的方法是什么?

1 个答案:

答案 0 :(得分:3)

最简单的方法是调用您创建的类型对象,例如使用PyObject_CallFunction - 不要让这个名字欺骗你,它可以让你调用任何可调用,只是一个函数。

如果您没有方便地将类型对象引用作为C模块的全局static,则可以通过各种方式检索它(例如,从带有{的模块对象中检索它{3}})。但是将PyObject*粘贴到static模块级C变量中可能是最简单和最方便的。