Pythonの特殊メソッド実装パターン

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 オブジェクト

タグ: Python 特殊メソッド マジックメソッド オブジェクト指向 演算子オーバーロード

7月10日 17:43 投稿