Pythonの特殊メソッドについて

こんにちは、Azusaです。

本日はPythonにおける特殊メソッドの動きについて、初心者が理解しづらいであろう動きについて解説しようと思います。

定義の仕方や、その他の構文等については理解している前提での記事ですので、書いては見たもののなぜ結果がそうなっているかわからない方の理解の補助になればと思って書いていきます。

まず例として、__add__(self, other)という特殊メソッドをクラス(EXAMPLE)に定義したとします。

class EXAMPLE:
    def __init__(self, i):
        self.value = i

    def __add__(self, other):
        return self.value + other.value

通常のメソッドの書き方で__add__()を呼び出すときには、

hoge = EXAMPLE(1)
huga = EXAMPLE(2)

x = hoge.__add__(huga)

のように書くと思いますが、特殊メソッドを使えば、各種演算子等を使うことで簡潔に記述できるというものになります。
上記コードを書き換えてみると、

hoge = EXAMPLE(1)
huga = EXAMPLE(2)

x = hoge + huga

という書き方ができるというのが、特殊メソッドです。

+という演算子を使っているので、一見足し算をしているように見えてしまいますが、実際は演算子の前に記述されているクラスの__add__()メソッドに演算子のあとに記載されているクラスを引数として呼び出している動きになります。

因みに上記の特殊メソッドではhoge, hugaの各インスタンスのvalueを足して出力しているだけなので、xには3が代入されることになります。

このようにパッと見では足し算をしているように見えて、実際にはクラスに定義された特殊メソッドの処理が行われるので、学び始めたばかりの方は勘違いをしてしまいがちですね。

あくまでも”特定の名称のメソッドを呼び出すときの簡略化した書き方である”ということを理解できれば、混乱することはなくなるかと思います。

というわけで本日はPythonの特殊メソッドでの躓きポイントについて、できる限りわかりやすく説明してみました。

では、また〜♪

コメントを残す