ホームページ >バックエンド開発 >Python チュートリアル >Python での演算子のオーバーロード使用の詳細な分析

Python での演算子のオーバーロード使用の詳細な分析

高洛峰
高洛峰オリジナル
2017-03-06 13:43:461358ブラウズ

この記事の例では、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__ 比較


例:

__getitem__ インターセプト すべてのインデックス操作

>>> 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

Python での演算子のオーバーロード使用法の詳細な分析と関連記事については、PHP 中国語 Web サイトに注目してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。