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 引数が最初の引数として自動的に挿入され、署名が違う。どうすればこれを解決できますか?
どうもありがとうございました。