我将派生类传递给使用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*)
答案 0 :(得分:4)
问题是在类Derived中我没有正确调用Base .__ init __()。
一旦我解决了这个问题,Swig中的多态就行了。
class Derived(Base):
def __init__(self):
super(Derived, self).__init__()