こんにちは、ミナトです。
Pythonのクラスには、コンストラクタ__init()__のように__(アンダースコア)が2つついた特殊メソッドが多数存在します。
今回は特殊メソッドの使い方を紹介します。

以下のような方を対象としています
- Pythonでのクラスの特殊メソッドについて知りたい
- Pythonでプログラミングを学びたい
特殊メソッドの使い方
特殊メソッドとは
特殊メソッドは、__init()__のように__(アンダースコア)が2つついたメソッドです。
オブジェクトの演算処理を行った際の振る舞いなどを変更する際に使います。
例えば、__add__()メソッドでは、「i + 1」などオブジェクトの加算を行った際の振る舞いを定義できます。
__add__()
オブジェクトに足して加算を行った際に実行される特殊メソッドです。
class Sample:
def __init__(self, val):
self.val = val
def __add__(self, other):
return self.val + other.val
o1 = Sample(1)
o2 = Sample(2)
print(o1 + o2)
## 出力
3
算術演算子に対応する特殊メソッド
以下、算術演算子に対応する特殊メソッドの一部を掲載しています。
__add__(self, other) | 「+」で足し算を行うとき |
__sub__(self, other) | 「-」で引き算を行うとき |
__mul__(self, other) | 「※」で掛け算を行うとき |
__truediv__(self, other) | 「/」で割り算を行うとき |
__mod__(self, other) | 「%」で割り算を行うとき |
__eq__()
比較演算子「==」使用時に実行されます。
class Sample:
def __init__(self, val):
self.val = val
def __eq__(self, other):
return self.val == other.val
o1 = Sample('こんにちは')
o2 = Sample('こんにちは')
o3 = Sample('おはよう')
print(o1 == o2)
print(o1 == o3)
## 出力
True
False
比較演算子に対応する特殊メソッド
以下、比較演算子に対応する特殊メソッドの一部を掲載しています。
__eq__(self, other) | 「==」で比較するとき |
__ne__(self, other) | 「!=」で比較するとき |
__lt__(self, other) | 「<=」で比較するとき |
__gt__(self, other) | 「>=」で比較するとき |
__str__()
str()関数で文字列型に変換する時やprint()で出力する時に実行されます。
class Sample:
def __init__(self, val):
self.val = val
def __str__(self):
return str(self.val)
o1 = Sample('こんにちは')
print(o1)
## 出力
こんにちは
型変換に対応する特殊メソッド
以下、型変換に対応する特殊メソッドの一部を掲載しています。
__int__(self) | 「int()」で型変換するとき |
__float__(self) | 「float()」で型変換するとき |
__str__(self) | 「str()」で型変換するとき |
__len__()
len()関数を呼び出した時に実行されます。
class Sample:
def __init__(self, val):
self.val = val
def __len__(self):
return len(self.val)
o1 = Sample('こんにちは')
print(len(o1))
## 出力
5
その他特殊メソッド
以下、その他の特殊メソッドの一部を掲載しています。
__len__(self) | 「len()」で長さを取得するとき |
__call__(self) | 「オブジェクト名()」の形式で関数のように呼び出した時の処理 |
__del__(self) | オブジェクトがメモリから削除される時 |
まとめ
今回はPythonの特殊メソッドについて紹介しました。
今回紹介したもの以外にも多くの特殊メソッドが存在するので、興味がある方は公式のドキュメントをご確認ください。
最後まで読んでいただき、ありがとうございます。
この記事が、「面白いな」、「勉強になったな」という方は、SNSでシェアしていただけると嬉しいです。
全て覚える必要はないけど、概要について理解しておこう!