Python子类与C++基类
我有一些C++代码,通过SWIG让它可以在Python中使用。在这段代码里,有一个基类,里面有一个纯虚函数。
在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)
2 个回答
0
这不是一个真正的答案,但你可能在使用 boost.python 时会更顺利。我不知道你换成这个需要多少工作,但你可能很快就能为你的问题搞定一个简单的继承测试案例。
2
我猜 Foo
在 C++ 环境中并没有被认为是从 mybase
继承来的。我不太确定 SWIG 是否能做到这一点,因为它需要双向理解继承关系——也就是说,Python 类使用 C++ 类作为基础,而 C++ 代码也要能识别这种继承关系。我建议你认真看看 Boost.python,因为它似乎支持你想要的功能。这里有一个关于它的 wiki.python.org 文章。