我可以使用SWIG_NewPointerObj将C ++对象传递给Python,但它不是 PyObject *所以我无法在Python中正确使用它。
我的问题是:有没有办法在C ++中获取用Python创建的C ++对象的 PyObject *?
答案 0 :(得分:0)
每个C ++对象没有唯一的PyObject
。例如,如果您包装以下内容:
struct foo {};
struct foo *test() {
static struct foo inst;
return &inst;
}
对Python内test()
的每次调用都会返回一个新的PyObject
- SWIG没有简单的方法可以知道它们是相同的。
返回的PyObject
是瘦包装器,即C ++对象周围没有本地状态的代理。从Python的角度来看,这些看起来和行为都像是同一个对象,因为它们将所有内容委托给C ++对象。
如果你想获得 a PyObject
,你可以采取一些方法来做到这一点,但总的来说这并不是一个好主意,因为你对该对象所做的任何改变都不会即使它们引用相同的C ++对象,也可以从其他PyObject
看到。