Pythonの__add__と__radd__
あるクラスのインスタンスx、yがある場合
x + yとしたとき、インスタンスxの__add__が呼ばれる
インスタンスxに__add__メソッドがない場合、インスタンスyの__radd__が呼ばれる
インスタンスxに__add__メソッド、インスタンスyに__radd__メソッドがある場合、__add__メソッドのみが処理される
__add__も__radd__も存在しない場合はTypeErrorになる
class X: def __init__(self, val): self.val = val def __add__(self, other): print 'add', self.val, other class Y: def __init__(self, val): self.val = val def __radd__(self, other): print 'radd', self.val, other x = X(1) y = Y(1) x + x # add 1 <__main__.X instance at 0x1052547a0> y + y # radd 1 <__main__.Y instance at 0x1052547e8> x + y # add 1 <__main__.Y instance at 0x1052547e8> try: y + x except TypeError, e: print e # TypeError: unsupported operand type(s) for +: 'instance' and 'instance'