Python
 Computer >> コンピューター >  >> プログラミング >> Python

【Python】複数のオペランドに対応した演算子オーバーロードの実装方法

Pythonでは、通常の二項演算子とまったく同じ要領で、複数のオペランドに対する演算子オーバーロードを実装できます。ポイントは、__add__メソッドが常に「左側のオブジェクト」と「右側の1つのオブジェクト」を受け取るようになっている点です。

a + b + c のような式は (a + b) + c として順番に評価されるため、+ 演算が2つのオペランド間で正しく定義されていれば、いくらでも連結して使えます。実際に、+ 演算子をオーバーロードした複素数クラスの例を見てみましょう。

コード例

class Complex(object):
    def __init__(self, real, imag):
        self.real = real
        self.imag = imag
    def __add__(self, other):
        real = self.real + other.real
        imag = self.imag + other.imag
        return Complex(real, imag)
    def display(self):
        print(str(self.real) + " + " + str(self.imag) + "i")

a = Complex(10, 5)
b = Complex(5, 10)
c = Complex(2, 2)
d = a + b + c
d.display()

処理の流れ

  • a + b が先に評価され、新しい Complex(15, 15) オブジェクトが返されます。
  • その結果と c の間で再び __add__ が呼ばれ、最終的な Complex(17, 17) が生成されます。

このように、__add__ メソッドが新しいインスタンスを返す設計にしておけば、演算を何段階でもチェーンできるのがメリットです。

実行結果

上記のコードを実行すると、以下の出力が得られます。

17 + 17i
  1. PythonのBokehライブラリで複数の図形をプロットして可視化する方法

    Bokehは、データ可視化を支援するPythonパッケージです。オープンソースプロジェクトとして公開されており、HTMLとJavaScriptを使ってプロットを描画します。そのため、Webベースのダッシュボードを構築する際に特に有用なライブラリです。 BokehはデータソースをJSONファイルに変換します。このJSONファイルは、JavaScriptライブラリであるBokehJSへの入力として使用されます。BokehJSはTypeScriptで記述されており、モダンブラウザ上で可視化をレンダリングします。 MatplotlibやSeabornが静的なプロットを生成するのに対し、Bokehはイン

  2. Matplotlibを使ってPythonで複数のプロットを繰り返し作成する方法

    Matplotlibは、データ可視化のために広く利用されている人気のPythonライブラリです。データの可視化は非常に重要なステップであり、数値を一つひとつ確認したり複雑な計算を実行したりすることなく、データ内で何が起きているのかを把握するのに役立ちます。さらに、定量的な洞察を読者や聴衆へ効果的に伝えるための強力な手段にもなります。Matplotlibは、データから2次元のプロットを作成するために使用されます。オブジェクト指向APIを備えているため、Pythonアプリケーションへのグラフの埋め込みも簡単に行えます。IPythonシェル、Jupyter Notebook、Spyder IDEなど