1

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

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

4

1 回答 1

0

PyObject每个 C++ 对象没有唯一的。例如,如果您包装以下内容:

struct foo {};

struct foo *test() {
  static struct foo inst;
  return &inst;
}

test()对Python 内部的每次调用都会返回一个新的PyObject- SWIG 没有简单的方法来知道它们是相同的。

返回的PyObjects 是瘦包装器,即没有本地状态的 C++ 对象周围的代理。从 Python 的角度来看,它们看起来和行为都像同一个对象,因为它们将所有内容委托给 C++ 对象。

如果您想获得a PyObject,您可以通过多种方式做到这一点,但通常这不是一个好主意,因为您对该对象所做的任何更改都不会从其他PyObjects 中看到,即使它们引用了同一个 C++ 对象。

于 2012-04-29T09:42:40.667 回答