带有C ++基类的Python子类

时间:2009-11-22 11:41:23

标签: c++ python swig

我有一些C ++,我通过PythonSWIG公开了。在基类中有一个纯虚函数。

在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 :(得分:2)

我的猜测是,Foo并非源自C ++环境中的mybase。我不确定SWIG是否可以解决此问题,因为它需要双向理解继承 - Python类使用C ++类作为基础,C ++代码识别继承关系。我会仔细研究Boost.python,因为它似乎支持你所追求的功能。 Here's an entry on wiki.python.org about it.

答案 1 :(得分:0)

不是真的答案,但你可能会更幸运boost.python。不知道你要切换多少工作,但你可能会很快得到一个简单的继承测试用例来解决你的问题。