0

boost::python を使用して生成した python クラスからの継承に問題があります。

関数 Print() が次のように定義されているクラスがあります。

void CMagnet::Print()
{
  cout << "Hello" << endl;
}

インターフェイスは私の .cpp ファイルで次のように定義されています。

BOOST_PYTHON_MODULE (CMagnet)
{
   class_<CMagnet>("CMagnet")
      .def("Print", &CMagnet::Print)
      ;
}

原則として、モジュールは機能しますが、継承で問題が発生します。次に例を示します。

from CMagnet import CMagnet

class DerMagnet(CMagnet):
    def __init__(self):
        self.Print()

a = CMagnet()
a.Print()

b = DerMagnet()

私が得るものは次のとおりです。

ヒルベル> python der_test.py

Hello

Traceback (most recent call last):
  File "der_test.py", line 10, in <module>
    b = DerMagnet()
  File "der_test.py", line 5, in __init__
    self.Print()
Boost.Python.ArgumentError: Python argument types in
    CMagnet.Print(DerMagnet)
did not match C++ signature:
    Print(CMagnet {lvalue})

つまり、CMagnet クラスをインスタンス化すると問題なく Print() メソッドを呼び出すことができますが、それを継承して派生クラスがメソッドを呼び出そうとすると、self 引数が最初の引数として自動的に挿入され、署名が違う。どうすればこれを解決できますか?

どうもありがとうございました。

4

1 に答える 1

1

@kerim コメントを確認しました。

親クラスの「__init__」メソッドを呼び出さないと、このようなエラー メッセージが表示されます。

于 2013-01-24T10:56:37.997 に答える