2つの異なるPython拡張モジュールがあります。それらをAとBと呼びましょう。モジュールAには、クラスメソッドの戻り型としてモジュールB内で使用したいcontainerというストレージクラス型が含まれています。
これを行う方法についてのドキュメントが見つからないようです。モジュール/クラスを作成するために、この記事に大まかに従いました。ただし、すべてのメソッドを静的として宣言しなかったため、アクセス可能でした:http: //nedbatchelder.com/text/whirlext.html
私の質問は、モジュールBのクラスメソッドのPyObject *戻り値として返すことができるコンテナのインスタンスを作成するにはどうすればよいですか?コンテナ定義は次のようになります。
typedef struct {
PyObject_HEAD
storageclass* cnt_;
} container;
問題のメソッド内で次のことを簡単に実行してみました。container_initは、コンテナークラスのtp_initとして登録したメソッドです。
pycnt::container* retval;
pycnt::container_init(retval, NULL, NULL);
return (PyObject*)retval;
ただし、Pythonインタープリターによると、メソッドを呼び出したクラスが返されます。(つまり、myclassinstance.mymethod()はmyclassinstanceを返します)。
私は明らかにこれを間違った方法で行っていますが、正しい方法が何であるかわかりません。助言がありますか?それを示唆する人を断ち切るためだけに-いいえ、SWIGやBoost::Pythonの使用には興味がありません。私はすでにそれを試しましたが、コンテナの基礎となるストレージクラスはどちらともうまく機能しませんでした(SWIGはそれを解析することさえできませんでした)。これまでのところ、自分で拡張機能を実行するのはかなり苦痛がありませんでしたが、私はこれに困惑しています。