代码之家  ›  专栏  ›  技术社区  ›  Mizipzor

Python子类与C++基础类

  •  2
  • Mizipzor  · 技术社区  · 15 年前

    我有一些C++ Python 通过 SWIG . 在中有一个具有单个纯虚函数的基类。

    在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 回复  |  直到 15 年前
        1
  •  2
  •   D.Shawley    15 年前

    我猜是这样的 Foo 不是派生自 mybase 在C++环境下的眼睛。我不确定SWIG是否可以取消它,因为它需要对继承的双向理解——Python类使用C++类作为基,C++代码识别继承关系。我将认真研究boost.python,因为它似乎支持您所追求的功能。 Here's an entry on wiki.python.org about it.

        2
  •  0
  •   robince    15 年前

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