SWIG_NewPointerObj を使用して C++ オブジェクトを Python に渡すことはできますが、それはPyObject* ではないため、Python で正しく使用できません。
私の質問は: Python から作成された C++ オブジェクトのPyObject* を C++ で取得する方法はありますか?
PyObject
C++ オブジェクトごとに固有のものはありません。たとえば、次をラップする場合:
struct foo {};
struct foo *test() {
static struct foo inst;
return &inst;
}
test()
内部 Pythonへのすべての呼び出しは new を返しPyObject
ます。SWIG には、それらが同一であることを簡単に知る方法がありません。
返される はシン ラッパーです。PyObject
つまり、ローカル状態を持たない C++ オブジェクトのプロキシです。Python の観点から見ると、これらはすべて同じオブジェクトのように見え、同じように動作します。これは、すべてを C++ オブジェクトに委譲するためです。
を取得したい場合は、 これを行う方法がありますが、一般的には、そのオブジェクトに加えた変更は、同じ C++ オブジェクトを参照していてもPyObject
、他の からは見えないため、お勧めできません。PyObject