課題解決Tips

【Python】 pybind11を利用してPythonからC++のクラスを利用する方法

salmoncode
記事内に商品プロモーション(Amazonアソシエイト含む)を含む場合があります。

こんにちは!エンジニアのサーモンです。

前回はPythonからC++の関数を呼び出す方法について紹介しました。

今回は続きとして、PythonからC++のクラスを利用する方法について紹介します。

この記事はこんな人におすすめ
  • C++のライブラリをPythonから利用したい人
  • C++ライブラリのラッパーを開発したい人
  • PythonのスクリプトをC++によって高速化したい人

ぜひ最後まで読んでいってください!

スポンサーリンク

PythonからC++クラスの利用

まずはC++でクラスを定義します。

その後、クラスのバインドとメソッドのバインドを行います。

基本的に、関数をバインドするときと同様です。

1// C++
2
3// クラスの定義
4class Animal {
5    void Say() {
6        std::cout << "Hello!" << std::endl;  
7    }
8};
9
10// バインド
11PYBIND11_MODULE(my_module, module) {
12    pybind11::class_<Animal>(module, "Animal") // クラスのバインド
13        .def(pybind11::init<>())
14        .def("Say", &Animal::Say); // メソッドのバインド
15}

Pythonからは、モジュール内のクラスとして利用することができます。

インスタンスを作成すると、バインドされたメソッドも呼び出すことができます。

1# Python
2import my_module
3
4# クラスの継承
5class Human(my_module.Animal):
6    # メソッドの定義...
7
8human = Human()
9# C++メソッドの呼び出し
10human.Say() # Hello!

まとめ

この記事では、以下の内容について解説しました。

  • PythonからC++のクラスを利用する方法

参考情報

参考書籍

pybind11について書かれた書籍は見つかりませんでした。

参考記事

スポンサーリンク
ABOUT ME
サーモン
サーモン
著者(ソフトウェアエンジニア)
情報系大学院を卒業後、ソフトウェアエンジニアとして都内企業に従事。プログラミング歴は10年以上になります。
スポンサーリンク
記事URLをコピーしました