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

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

static PyTypeObject Vector_Type = {
    ...
};

这是在从Python中调用创建Vector的情况很简单,但我需要相同的扩展模块中创建一个Vector实例。我看着在文档中,但我无法找到一个明确的答案。什么是做到这一点?

最好的办法
有帮助吗?

解决方案

最简单的是调用自己创建的类型的对象,例如与 PyObject_CallFunction - 不要让名字骗了,它让你调用的任何的调用,请不可以只是一个函数。

如果你没有方便可行的全球到C模块static你的类型对象的引用,您可以通过多种方式检索,当然(的例如,从具有的 PyObject_GetAttrString )。但其粘附到PyObject*一个static模块级C变量可能是最简单和最方便的。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top