特殊メソッド
特殊メソッド
前回クラスの中で__init__()メソッドを定義しました。__init__()メソッドは、渡された引数を使い、クラス定義から新しく作成されたオブジェクトを初期化する特殊メソッドです。今回は__init__()メソッド以外の特殊メソッドについて説明したいと思います。
特殊メソッドの命名規則
特殊メソッドは名前の先頭と末尾が__(ダブルアンダースコア)で囲まれています。
比較のための特殊メソッド
比較のための特殊メソッドは以下の表のようになります。
メソッド | 意味 | |
---|---|---|
__eq__(self, other) | self == other | 等しい |
__ne__(self, other) | self != other | 等しくない |
__lt__(self, other) | self < other | より小さい |
__gt__(self, other) | self > other | より大きい |
__le__(self, other) | self <= other | 以下 |
__ge__(self, other) | self >= other | 以上 |
それでは使い方を見ましょう。
# sample.py class Word(): def __init__(self, text): self.text = text def __eq__(self, input_text): # input_textとは他のWordクラスのオブジェクト return self.text.lower() == input_text.text.lower() sample1 = Word('Hello') sample2 = Word('hello') sample3 = Word('goodbye') print("Hello" == "hello") print(sample1 == sample2) print(sample2 == sample3)
# 実行結果 (python sample.py) False True False
上記の結果を見て分かるように、クラス内で__eq__()メソッドを定義したことにより"=="の条件判定を書き換えることかできました。通常の場合は文字列の比較は大文字と小文字を区別しますが、特殊メソッドを実装することにより、その比較の方法を変更しています。他のメソッドについても同様に扱うことができます。
算術演算のための特殊メソッド
算術演算のための特殊メソッドです。
メソッド | 意味 | |
---|---|---|
__add__(self, other) | self + other | 加算 |
__sub__(self, other) | self - other | 減算 |
__mul__(self, other) | self * other | 乗算 |
__floordiv__(self, other) | self // other | 除算 |
__truediv__(self, other) | self / other | 除算 |
__mod__(self, other) | self / other | あまり |
__pow__(self, other) | self % other | 冪乗 |
使い方は比較演算子の例とほとんど同じです。自分で何か実装してみてください!
その他の特殊メソッド
これらの他にも様々な特殊メソッドが存在しますが、今のところ触れる必要のあるものは特にありません。上記で説明した特殊メソッドについても、そんなものがあるんだ程度に覚えていれば問題ないです。自分で本格的にプログラムを書くようになり、必要になったら詳しく学びましょう。
最後に
お疲れ様でした。今回は蛇足的な説明です。次回は、カプセル化について説明します。カプセル化はオブジェクト指向において重要な概念です。