2009年10月12日月曜日

def __iadd__(self, xx) の戻り値self

みんなのPythonで、 特殊メソッド __iadd__ をあるクラスでオーバーライド(処理の内容を変更)するサンプルがあった。でも、なぜ、メソッド __iadd__ に、return self が必要なのだろう。

まず、Pythonでは、通常の演算子 +, - += は、以下のような特殊メソッドで処理されている。(らしい)
それらを、オーバーライドするから、return self が必要なのだろう。 iaddは、自分自身を戻す。なんかイメージはできるけど、具体的に説明できない。 ちょっとの間は、「おまじない」として割り切ろう。

class Klass(object):

# 「+」演算子
def __add__(self, *args):
print '__add__'
print args

# 「-」演算子
def __del__(self, *args):
print '__del__'
print args

# 「+=」演算子
def __iadd__(self, *args):
print '__iadd__'
print args
return self

詳しくは、ここに書いてあります。