如果您正在寻找速度,我也肯定会投票给 Cython。据我所知,C++ 与 Python 的其他接口方式,与其他绑定工具相比,Cython 的维护/更新并没有那么繁重,就“工作流的流畅性”增益而言。(Cythonized 代码认为它和纯 C 一样快,或者离那不远,这也使它非常有趣)。
无论如何,有几个很好的 API 用于将 python 代码与 C++ 连接(Boost.Python,...),但我认为所有这些都将导致需要直接在 C++ 源代码中公开方法(你们告诉我,如果我'错了,或不精确)。
另一方面,Cython 将使您可以将您的 C++ API(GUI 或其他...)与暴露源(所谓的 .pyx 扩展名)严格分开。最终的工作流程是:
C++ API => 编译为共享对象 => Cython 扩展(导入和公开 C++ 功能)=> 扩展编译 => 使用扩展(要添加到 python 路径的扩展)。
好消息是,您只需要维护与不断发展的 C++ 特性相关的 .pyx 文件池中的变化部分(其中包括需要公开的特性)。一开始这是一种投资,但根据我的经验,一旦设置了这个工作流程,让整个东西变得复杂起来就很简单了。
现在关于您需要扩展具有虚拟的类并从 Python 覆盖它们(如果我理解正确的话)。这是可行的。再一次,不是那么直接,但你应该看看这个线程。
坏消息:在这种特殊情况下,您必须创建一些额外的 C++ 适配器/接口,以便在扩展的 python 没有覆盖给定父方法的情况下启用父方法的调用。(请注意,从 python 重新定义 C++ 公开的方法,无论是否是虚拟的,都是对函数的替换,但绝对不等同于覆盖)。
Hummf,现在我正在回读自己,看起来有点混乱。希望这仍然有帮助。
如果您选择 Cython 选项,我可以更具体地说明您必须处理的工作流程,如果您要求我这样做,但我认为上面链接的线程是一个很好的起点......