如何在SWIG中获得与C ++对象关联的* PyObject *?

时间:2012-04-26 18:24:22

标签: c++ python swig

我可以使用SWIG_NewPointerObj将C ++对象传递给Python,但它不是 PyObject *所以我无法在Python中正确使用它。

我的问题是:有没有办法在C ++中获取用Python创建的C ++对象的 PyObject *?

1 个答案:

答案 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看到。