3

SWIGを介してPythonに公開したC++がいくつかあります。には、単一の純粋仮想関数を持つ基本クラスがあります。

Pythonでは、モジュールをインポートし、抽象クラスをベースとして使用するクラスを定義します。

import mymodule
class Foo(mymodule.mybase):
    ...

そのモジュールはマネージャークラスでもあるので、新しく定義したクラスをマネージャーに追加したいと思います。

m = mymodule.mymanager()
m.add(Foo())

追加の定義:

void add(mybase* b) { ... }

期待どおりに機能しませんでした:

TypeError: in method 'mymanager_add', argument 2 of type 'mymodule::mybase *'

私は何を取りこぼしたか?私のFooクラスが「mybase」であるかどうかはわかりません。Pythonで基本クラスのコンストラクターへの呼び出しを追加しようとしましたが、それは機能しませんでした。クラスは抽象であると言いました。

def __init__(self):
    mymodule.mybase.__init__(self)
4

2 に答える 2

2

私の推測では、それはC++環境Fooから派生したものではありません。mybaseSWIGがこれを実現できるかどうかはわかりません。継承を双方向に理解する必要があるためです。PythonクラスはC++クラスをベースとして使用し、C++コードは継承関係を認識します。Boost.pythonはあなたが求めている機能をサポートしているように見えるので、真剣に調べます。 これについては、wiki.python.orgのエントリです。

于 2009-11-22T15:42:31.560 に答える
0

実際には答えではありませんが、boost.pythonを使用すると運が良くなる可能性があります。切り替えるのにどれだけの作業が必要かはわかりませんが、問題の簡単な継承テストケースをすぐに取得できる可能性があります。

于 2009-11-22T13:49:04.083 に答える