将派生类传递给在SWIG Python中使用基类的函数

时间:2013-08-01 03:51:38

标签: python swig

我将派生类传递给使用Python 3.3和SWIG 2.0.10的基类的函数。

相同的SWIG .i文件用于C#,效果很好。但是,在Python中,SWIG报告没有接受派生类型的C ++方法 - 只接受基类型的方法。该陈述是正确的,但我需要传递派生类型并让SWIG指示调用,就像它是基类型一样。

C ++中不存在派生类型。它只存在于Python(和C#)中。但是,我们已启用了导演,并且如上所述,它在C#中正常工作。

Python 2.6和2.7中的结果相同。

C ++

class Base {};
// Note: there is NO "class Derived" in C++.
void f(Base* a) { ... }

的Python

class Derived(Base): pass

x = Derived()
f(x) # SWIG runtime error - In C++ there is no f(Derived*) - there is only f(Base*)

1 个答案:

答案 0 :(得分:4)

问题是在类Derived中我没有正确调用Base .__ init __()。

一旦我解决了这个问题,Swig中的多态就行了。

class Derived(Base):
    def __init__(self):
        super(Derived, self).__init__()