我有两个不同的 Python 扩展模块;我们称它们为 A 和 B。模块 A 包含一个称为容器的存储类类型,我想在模块 B 中将其用作类方法的返回类型。
我似乎找不到任何关于我应该如何执行此操作的文档。我大致按照这篇文章来创建模块/类,除了我没有将所有方法声明为静态的,所以它们可以访问: http: //nedbatchelder.com/text/whirlext.html
那么我的问题是,如何创建一个容器实例,我可以将其作为模块 B 中类方法的 PyObject* 返回值传回?容器定义如下所示:
typedef struct {
PyObject_HEAD
storageclass* cnt_;
} container;
我尝试在相关方法中简单地执行以下操作,其中 container_init 是我为容器类注册为 tp_init 的方法:
pycnt::container* retval;
pycnt::container_init(retval, NULL, NULL);
return (PyObject*)retval;
然而,根据 Python 解释器,我正在取回调用该方法的类。(即,myclassinstance.mymethod() 正在返回 myclassinstance)。
我显然是以错误的方式解决这个问题,但我不知道正确的方法是什么。有什么建议么?只是为了切断任何人的建议——不,我对使用 SWIG 或 Boost::Python 不感兴趣。我已经尝试过了,容器的底层存储类也不能很好地使用(SWIG 甚至无法解析它)。到目前为止,自己进行扩展非常轻松,但我对这个感到难过。