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()

我得到的是:

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 参数会自动作为第一个参数插入,并且签名是错误的。我将如何解决这个问题?

非常感谢你的帮助。

4

1 回答 1

1

我确认@kerim 评论。

如果你不调用父类“__init__”方法,你会得到这种错误信息。

于 2013-01-24T10:56:37.997 回答