ホームページ > バックエンド開発 > Python チュートリアル > Python での算術演算子の高度な使用法

Python での算術演算子の高度な使用法

WBOY
リリース: 2016-07-21 14:53:13
オリジナル
1475 人が閲覧しました

Python におけるオブジェクトの動作は、その型によって決まります。いわゆるタイプは、特定の特定の操作をサポートするものです。数値オブジェクトはあらゆるプログラミング言語の基本要素であり、加算、減算、乗算、除算などの数学演算をサポートします。
Python の数値オブジェクトには整数と浮動小数点数が含まれており、+、-、*、/ などのさまざまな数学演算をサポートしています。 これらの演算子がないと、プログラムは関数呼び出しを使用して、add(2, 3)、sub(5, 2) などの数学演算を実行することしかできません。
プログラム内の演算子の機能は通常の数学演算の使用法と一致しているため、より簡単かつ直感的に使用できます。 Python では、これらの演算子は、object.__add__() や object.__sub__() などのオブジェクトのいくつかの特別なメソッドを定義することによって実装されます。ユーザーが独自のクラスを定義するときに上記の特別なメソッドを実装すると、カスタム クラスのオブジェクトは対応する数学的演算をサポートできるため、デジタル オブジェクトの動作をシミュレートできます。これにより、実際には演算子のオーバーロードの効果が得られます。

ここでは、加算演算をサポートする中国語の数値クラスを実装することによって、Python で一般的な数学演算をサポートする中国語の数値クラスを実装する方法について説明します。 ChineseNumber クラスの基本的な定義は次のとおりです。

リーリー

現時点での効果は以下の通りです。

リーリー

一般的な数学演算子
クラスを定義するときは、__add__() メソッドを実装して、このクラスに + 演算子を追加します。次のメソッドを ChineseNumber に追加します:

リーリー

現時点では、 ChineseNumber オブジェクトは + を使用できます。

リーリー

+ の場合、a + b は a.__add__(b) を呼び出すことと同じです。同様に、他の算術演算子を定義できます。以下の表を参照してください。

リーリー

オペランド反転を伴う数学演算子 (オペランドの反映/交換)

リーリー

2 は整数型であり、その __add__() メソッドは ChineseNumber クラスのオブジェクトをサポートしていないため、上記のエラーが発生しました。オペランド反転を使用して数学演算子を定義すると、この問題を解決できます。 __radd__() メソッドを ChineseNumber クラスに追加して、オペランド反転の + 演算を実装します。

リーリー

a + b の場合、a が __add__() メソッドを定義していない場合、Python は b の __radd__() メソッドを呼び出そうとします。このとき、a + b は b.__radd__(a) を呼び出すことと同じになります。

リーリー

同様に、オペランド反転を伴う他の数学演算子を定義できます。以下の表を参照してください。

リーリー

算術代入演算子
演算代入演算子は、単一の演算子を使用して演算と代入演算を完了します。たとえば、a += b は、a = a + b を呼び出すことと同じです。 += 演算子を実装するには、__iadd__() メソッドを ChineseNumber に追加します。

リーリー

この時、

リーリー

同様に、他の演算代入演算子も定義できます。以下の表を参照してください。

リーリー

単項数学演算子
単項数学演算子は、負の数を取得するための演算子など、オペランドが 1 つだけある演算です。 - 対応する特殊関数は __neg__() です。 ChineseNumber の __neg__() メソッドを追加します

リーリー

この時点で、 ChineseNumber オブジェクトは - 操作をサポートします。

リーリー

その他の単項演算子については、以下の表を参照してください。

リーリー

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート