Python演算子のオーバーロード

python-operator.png

基本的に__メソッド名__で囲むと、何か特別な関数へのオーバーロードになるようだ

演算子 対応するメソッド名 メソッド起動の例
+ __add__ A + B
- __sub__ A - B
/ __div__ A / B
* __mul__ A * B
| __or__ A | B
インスタンスの作成 __init__ Class()
ガーベージコレクション __del__
出力・型変換 __repr__,__str__ print X, `X`, str(X)
インスタンスの呼び出し __call__ X()
.を使用した属性へのアクセス __getattr__ X.abc
属性への値の代入 __setattr__ X.abc = value
インデクシング __getitem__ X[key]
シーケンスの特定の要素への代入 __setitem__ X[key] = value
シーケンスの長さ取得 __len__ len(X)
比較 __cmp__ X == Y, X < Y
小なり __lt__ X < Y(cmpでも対応可)
同等か __eq__ X == Y(cmpでも対応可)
インスタンスが右側に使われた場合の+演算子 __radd__ Noninstance + X
上書き加算 iadd X += Y(addでも対応可)
ループ、反復 iter forループ, X in Y

operator

サポートサイト Wikidot.com operator