Pythonで演算子オーバーロードを実装する方法

この記事では、Pythonでの演算子オーバーロードについて詳しく解説します。Pythonの特殊メソッドを使って独自のクラスで演算子の動作をカスタマイズする方法、具体的なコード例、その解説、さらに応用例を含めています。

目次

演算子オーバーロードとは

演算子オーバーロードとは、プログラミング言語が提供する既存の演算子(+, -, *, / など)に対して、独自の動作を定義することを指します。これにより、独自のクラスで演算子を使うことが可能となり、コードが直感的で読みやすくなる場合があります。

基本的な方法

Pythonでは、演算子オーバーロードを行うためには特殊メソッドを使います。たとえば、`+` 演算子をオーバーロードする場合には、`__add__`メソッドを定義します。

基本的なコード例

class ComplexNumber:
    def __init__(self, real, imag):
        self.real = real
        self.imag = imag

    def __add__(self, other):
        return ComplexNumber(self.real + other.real, self.imag + other.imag)

# 使用例
c1 = ComplexNumber(1, 2)
c2 = ComplexNumber(3, 4)
c3 = c1 + c2  # ComplexNumber クラスの __add__ メソッドが呼ばれる

この例では、`ComplexNumber` クラスで `+` 演算子をオーバーロードしています。`__add__`メソッドは2つの `ComplexNumber` オブジェクトを加算するためのものです。

応用例

減算のオーバーロード

次に、`-` 演算子をオーバーロードする方法を示します。

def __sub__(self, other):
    return ComplexNumber(self.real - other.real, self.imag - other.imag)

# このメソッドを ComplexNumber クラスに追加

文字列表現のカスタマイズ

オブジェクトの文字列表現をカスタマイズするには、`__str__` メソッドをオーバーライドします。

def __str__(self):
    return f"{self.real} + {self.imag}i"

# このメソッドを ComplexNumber クラスに追加

等価性のオーバーロード

等価性を判定する `==` 演算子をオーバーロードする方法です。

def __eq__(self, other):
    return self.real == other.real and self.imag == other.imag

# このメソッドを ComplexNumber クラスに追加

まとめ

Pythonでの演算子オーバーロードは特殊メソッドを用いて簡単に行えます。これにより、独自のクラスで演算子を自由に使うことができ、より直感的なコードを書くことが可能になります。

コメント

コメントする

目次