Pythonの特殊メソッド(ダンダーメソッド)は、言語機能とオブジェクトの相互作用を可能にするコアメカニズムです。これらのメソッドは__で始まり__で終わる名前を持ち、演算子のオーバーロードや組み込み関数の動作をカスタマイズします。
基本的な特殊メソッド実装例
オブジェクト初期化
<code>class ユーザー:
def __init__(self, 名前, 年齢):
self.名前 = 名前
self.年齢 = 年齢
インスタンス = ユーザー('太郎', 25)
print(インスタンス.名前) # 出力: 太郎</code>
文字列表現
<code>class ユーザー:
def __str__(self):
return f"{self.名前} ({self.年齢}歳)"
インスタンス = ユーザー('花子', 30)
print(インスタンス) # 出力: 花子 (30歳)</code>
コンテナ操作
<code>class カスタムリスト:
def __init__(self, 要素):
self.要素 = 要素
def __len__(self):
return len(self.要素)
def __getitem__(self, 位置):
return self.要素[位置]
リスト = カスタムリスト([10, 20, 30])
print(len(リスト)) # 出力: 3
print(リスト[1]) # 出力: 20</code>
算術演算
<code>class ベクトル:
def __init__(self, x, y):
self.x = x
self.y = y
def __add__(self, 他):
return ベクトル(self.x + 他.x, self.y + 他.y)
v1 = ベクトル(1, 2)
v2 = ベクトル(3, 4)
結果 = v1 + v2
print(結果.x, 結果.y) # 出力: 4 6</code>
比較操作
<code>class 座標:
def __eq__(self, 他):
return self.x == 他.x and self.y == 他.y
def __lt__(self, 他):
return self.x < 他.x and self.y < 他.y
p1 = 座標(1, 2)
p2 = 座標(3, 4)
print(p1 == p2) # 出力: False
print(p1 < p2) # 出力: True</code>
特殊メソッド一覧
| メソッド | 機能 | 呼び出し方法 |
|---|---|---|
| __iter__ | 反復可能オブジェクトを返す | iter(オブジェクト) |
| __next__ | 次の要素を返す | next(オブジェクト) |
| __call__ | 関数として呼び出し | オブジェクト() |
| __contains__ | 包含判定 | 値 in オブジェクト |
| __del__ | 削除時の処理 | del オブジェクト |