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