演算子のオーバーロード

Pythonではすべての演算子オーバーロード可能だ。でも演算子全部といいながら単項演算子は無かったような気がする。

# pythonのうろ覚えで書いた動作確認してないコード
class X:
  def __init__(self):
    self.value = 0
  def __add__(self, a):
    self.value += a

x = X()
x + 1

上の例みたいに演算子に対応した名前(上の例では+が__add__)があって、そのメソッドを定義するだけ。各演算子がどんな名前かはリファレンスを見た方がいいと思う。
+の他に+=を別にオーバーロードすることもできるので、+は新しくオブジェクトを作るけど+=は左辺を書き換えるだけみたいな実装も可能。
__call__というC++の括弧演算子みたいなものもあって、あんまり推奨されないものだと思うけど使いたくてしょうがない。