我从使用 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()
我得到的是:
hirbel> 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 参数会自动作为第一个参数插入,并且签名是错误的。我将如何解决这个问题?
非常感谢你的帮助。