在C中创建Python扩展类型的实例
我正在写一个简单的 Vector
实现,这是一个用 C 语言编写的 Python 扩展模块,基本上长这样:
typedef struct {
PyObject_HEAD
double x;
double y;
} Vector;
static PyTypeObject Vector_Type = {
...
};
在 Python 中创建 Vector
的实例非常简单,但我需要在同一个扩展模块中创建一个 Vector
实例。我查阅了文档,但没有找到明确的答案。有什么好的方法可以做到这一点吗?
1 个回答
3
最简单的方法就是调用你创建的类型对象,比如使用 PyObject_CallFunction。别被这个名字迷惑了,它其实可以让你调用 任何 可调用的东西,不仅仅是函数。
如果你没有方便地将你的类型对象作为一个 static
全局变量放在你的 C 模块里,你当然可以通过各种方式来获取它(比如通过你的模块对象使用 PyObject_GetAttrString)。不过,把这个 PyObject*
放到一个 static
模块级的 C 变量里,可能是最简单和最方便的做法。