速度を求めるなら、私も間違いなく Cython に投票します。C++ と Python をインターフェースする他の方法について私が知る限り、「ワークフローの流動性」の向上に関して、Cython は他のバインディング ツールと比較して維持/更新がそれほど重くありません。(Cython 化されたコードは、純粋な C と同じか、それほど遠くないと主張しており、非常に興味深いものです)。
とにかく、Python コードを C++ に接続するための優れた API がいくつかあります (Boost.Python など)。間違っているか、不正確です)。
一方、Cython では、C++ API (GUI など) を公開ソース (いわゆる .pyx 拡張子) から厳密に分離しておくことができます。最終的なワークフローは次のようになります。
C++ API => 共有オブジェクトとしてのコンパイル => Cython 拡張機能 (C++ 機能のインポートと公開) => 拡張機能のコンパイル => 拡張機能の使用 (Python パスに追加される拡張機能)。
良いニュースは、進化する C++ 機能に関連する .pyx ファイルのプールの変更部分 (公開する必要がある部分) のみを維持する必要があることです。最初は投資のようなものですが、私の経験では、このワークフローがセットアップされると、全体を複雑に成長させるのは非常に簡単です.
バーチャルを持つクラスを拡張し、Python からそれらをオーバーライドする必要性について (私があなたの意図を正しく理解した場合)。それは実行可能です。繰り返しますが、それほど直接的ではありませんが、このスレッドをご覧ください。
悪いニュース: その特定のケースでは、拡張された python が指定された親のメソッドをオーバーライドしない場合に親メソッドの呼び出しを有効にするために、いくつかの追加の C++ アダプター/インターフェイスを作成する必要があります。(仮想であるかどうかにかかわらず、C++ で公開されたメソッドを python から再定義することは、関数の置き換えですが、オーバーライドとはまったく同等ではないことに注意してください)。
うーん、自分自身を読み返してみると、少し混乱しているように見えます。これがまだ役立つことを願っています。
Cythonオプションを選択した場合に対処する必要があるワークフローについて、より具体的に説明できますが、上記のスレッドは非常に良い出発点だと思います...