この記事の例では、Python での演算子のオーバーロードの使用法について説明します。参考のために皆さんと共有してください。詳細は次のとおりです:
クラスは Python 演算子をオーバーロードできます
演算子のオーバーロードにより、オブジェクトが組み込みオブジェクトと同じになります。 __X__ という名前のメソッドは特別なフックであり、Python はこの特別な名前付けを通じて演算子をインターセプトしてオーバーロードを実現します。 Python は演算子を計算するときにそのようなメソッドを自動的に呼び出します。たとえば:
オブジェクトが __add__ メソッドを継承する場合、このメソッドは + 式に現れるときに呼び出されます。オーバーロードにより、ユーザー定義オブジェクトは組み込みオブジェクトと同様に動作します。
クラス内の演算子のオーバーロード
1. 演算子のオーバーロードにより、クラスが標準の Python 操作をインターセプトできるようになります。
2. クラスはすべての Python 式演算子をオーバーロードできます。
3. クラスはオブジェクト操作 (印刷、関数呼び出し、修飾など) をオーバーロードできます。
4. オーバーロードにより、クラス インスタンスが組み込みインスタンスのように見えます。
5. オーバーロードは、特別に名前を付けたクラス メソッドを通じて実装されます。
メソッド名 オーバーロードされた操作命令 呼び出し式 __init__ コンストラクター オブジェクトの作成: class()
__del__ デストラクター オブジェクトを解放するとき
__add__ "+" "|" x + y
__or__ "|" x
__repr__ 、convert print x, `x`
__call__ 関数呼び出し X()
__getattr__ 属性参照 x.unknown
__getitem__ インデックス インデックスの割り当て x[key] = value
__getslice__ シャーディング x[low:high]
__len__ 長さ len(x)
__cmp__ 比較
例:
>>> class indexer: def __getitem__(self,index): return index ** 2 >>> x = indexer() >>> for i in range(5): print x[i] #x[i]将调用__getitem__(x,i) 0 1 4 9 16