boost.python: 从 Python 调用基数 class 的函数

boost.python: Calling function of a base class from Python

我有一个暴露了 C++ class 的模块:

class MyClass{
public:
    MyClass(){}
    void foo(){
        //...
    }
};

BOOST_PYTHON_MODULE(my_module){
    class_<MyClass>("MyClass", init<>())
        .def("foo", &MyClass::foo)
        ;
}

在 Python 中,我创建了一个派生自此 class 的 class。

from my_module import *

class Derived(MyClass):
    def __init__(self):
        self.foo()

d = Derived()

我收到错误:

Boost.Python.ArgumentError: Python argument types in
    MyClass.foo(Derived)
did not match C++ signature:
    foo(class MyClass {lvalue})

我希望能够从派生 class 调用基 class 中定义的函数。我该如何解决这个问题?

看来您需要在调用 foo 之前调用 MyClass.__init__(self);否则 foo 不会获得 MyClass 实例。使用 super().

的奖励积分