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

[ 参照リンク:Pythonでの演算子のオーバーロード](https://www.imangodoc.com/203.html)

オペレーターオーバーロードpython

Welcome to the tutorial on Python Operator Overloading. As we have already learnt about Python Class, we are going to learn another interesting feature of object oriented python today.

Python演算子のオーバーロードチュートリアルへようこそ。すでにPythonクラスを知っているので、今日はオブジェクト指向のpythonのもう1つの興味深い機能を学びます。

Pythonオペレーターのオーバーロード

Python Operator overloading enables us to use mathematical, logical and bitwise operators on python objects just like any primitive data type.

Python演算子のオーバーロードにより、他のプリミティブデータタイプと同様に、Pythonオブジェクトで数学、論理、およびビット単位の演算子を使用できます。

For example, you can easily add two numbers 3 and 5 with + operator, i.e 3 + 5. And the result is 8.

たとえば、+演算子を使用して、3と5の2つの数値(3 +5)を簡単に追加できます。結果は8です。

But what if you want to add two circles (object of a Circle class) and make a circle having twice the radius? Or what if you want to add two cartesian grid points to yield another point with the same ‘+’ operator? Python operator overloading allows you to perform operations just like those.

しかし、2つの円(クラスCircleのオブジェクト)を追加して、半径が2倍の円を作成したい場合はどうでしょうか。または、2つのカルテシアングリッドポイントを追加して、同じ「+」演算子で別のポイントを生成する場合はどうなりますか? Python演算子のオーバーロードを使用すると、それらの操作と同じように操作を実行できます。

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

Now, let’s see an example of overloading mathematical operator.

それでは、オーバーロードされた数学演算子の例を見てみましょう。

class GridPoint:  #Line: 1, Declaring a class

def init(self, x, y):

self.x = x

self.y = y  #Line: 4

def add(self, other):  # Equivalent of + operator

return GridPoint(self.x + other.x, self.y + other.y)

def str(self):  #Line: 12, returns the attributes when the object is printed

string = str(self.x)

string = string + ", " + str(self.y)

return string  #Line: 12

point1 = GridPoint(3, 5)  #Line: 14 Creating a grid point

point2 = GridPoint(-1, 4)  #Line: 15, Creating another point

point3 = point1 + point2  #Line: 16, Add two points using add() method

print(point3)  #Line: 17, Print the attributes using str() method

Lines 1 to 4 indicates the declaration of the class GridPoint and definition of constructor method. Let’s have a look at lines 6 and 7.

1行目から4行目は、GridPointクラスの宣言と構築メソッドの定義を表しています。 6行目と7行目を見てみましょう。

def add(self, other):  # Equivalent of + operator

return GridPoint(self.x + other.x, self.y + other.y)

When we use ‘+’ operator as mathematical addition operation, the add() method is implicitly called.

'+'演算子を数学的な加算演算として使用すると、__ add __()メソッドが暗黙的に呼び出されます。

So, if we are to add two objects of the class GridPoint, we must re-define this method. So, here we need to create another instance of GridPoint class whose value of x is the summation of x in the two GridPoint instances around the ‘+’ operator and value of y is also the summation of y in the two GridPoint instances around the ‘+’ operator.

したがって、GridPointクラスの2つのオブジェクトを追加する場合は、このメソッドを再定義する必要があります。したがって、ここではGridPointクラスの別のインスタンスを作成する必要があります。xの値は「+」演算子の近くの2つのGridPointインスタンスのxの合計であり、yの値は「」の周りの2つのGridPointインスタンスでもあります。のyの合計。 + '演算子。

Lines 9 to 12 defines the str() method which is called when we try to print the object. That’s also a built in method. But we are going to overload the method so that it prints in our specified format.

9行目から12行目は、オブジェクトを印刷しようとしたときに呼び出される__str __()メソッドを定義しています。これも組み込みの方法です。ただし、指定された形式で印刷されるように、このメソッドをオーバーロードします。

Lines 14 and 15, we’ve created two objects of GridPoint, namely point1 and point2. Now, watch Line 16. Two instances of the class GridPoint class are added using ‘+’ operator and assigned as another instance of GridPoint. Python operator overloading helps you do this. So, don’t get surprised when the 17th line shows an output like below image.

14行目と15行目に、GridPointの2つのオブジェクトpoint1とpoint2を作成しました。ここで、16行目を見てください。 '+'演算子を使用して、GridPointクラスの2つのインスタンスを追加し、それらをGridPointの別のインスタンスに割り当てます。 Python演算子のオーバーロードは、これを行うのに役立ちます。したがって、17行目が次の図に示す出力を示している場合でも驚かないでください。

数学的演算子のリスト

Here is a list of operators which can be overloaded and used with python operator overloading in a similar way.

これは、オーバーロードできる演算子のリストであり、同様の方法でpython演算子のオーバーロードで使用できます。

OperatorDescriptionMethod+Addition__add__(self, other)–Subtraction__sub__(self, other)*Multiplication__mul__(self, other)/True Division__truediv__(self, other)//Floor Division__floordiv__(self, other)%Remainder__mod__(self, other)**Power__pow__(self, other)&Bitwise AND__and__(self, other)|Bitwise OR__or__(self, other)^Bitwise XOR__xor__(self, other)

演算子の説明方法+加算__add __(自己、その他)-減算__sub __(自己、その他)乗算__mul __(その他)/真师__truediv __(自己、その他)//フロア部門__floordiv __(self、other)%Yu __mod __(self、other)* Power __pow __(self、other)and bitwise with __ and __(self、other)| bitwise or __ or __ (自己、その他)^ビット単位の排他的または__xor __(自己、その他)

Pythonでのリレーショナル演算子のオーバーロード

Relational operators are overloaded in a very similar way in python. But the difference is, those operators often return true/false instead of another instance of the object. Let’s work with an example.

リレーショナル演算子は、pythonでも非常によく似た方法でオーバーロードされます。ただし、違いは、これらの演算子は通常、オブジェクトの別のインスタンスではなくtrue / falseを返すことです。例を見てみましょう。

class GridPoint:

def init(self, x, y):

self.x = x

self.y = y

def gt(self, other):  # Overloading the greater than operator

return self.x > other.x

Returns true if value of x in the left operand is greater than that in the right one. Returns false otherwise

def str(self):

string = str(self.x)

string = string + ", " + str(self.y)

return string

point1 = GridPoint(3, 5)

point2 = GridPoint(-1, 4)

if point1 > point2:  # Compares with the overloaded gt() method

print('point1 is greater than point2')

else:

print('point1 is not greater than point2')

Look at line 6, where the ‘greater than’ operator has been loaded. The conventional ‘>’ operator returns true if the operand in the left side of it is greater than the right one. We are going to use this property to compare two instances of class GridPoint.

6行目を見てください。「より大きい」演算子がロードされています。左側のオペランドが右側のオペランドよりも大きい場合、通常の「>」演算子はtrueを返します。このプロパティを使用して、GridPointクラスの2つのインスタンスを比較します。

Then in line 17, we are comparing the objects of the class GridPoint to obtain a boolean type value which will determine whether the first object has the greater value of ‘x’. In this case, the relational operator returns true as 3 is greater than -1. As a result the program prints ‘point1 is greater than point2’.

次に、17行目で、GridPointクラスのオブジェクトを比較してブール値を取得します。これにより、最初のオブジェクトの「x」値が大きくなるかどうかが決まります。この場合、3が-1より大きい場合、リレーショナル演算子はtrueを返します。その結果、プログラムは「point1はpoint2より大きい」と出力します。

Pythonのその他のリレーショナル演算子

Here is a list of relational operators that can be overloaded in the same way.

これは、同じ方法でオーバーロードできるリレーショナル演算子のリストです。

OperatorDescriptionMethod>Greater than__gt__(self, other)>=Greater than or equal to__ge__(self, other)<Less than__lt__(self, other)<=Less than or equal to__le__(self, other)==Equal to__eq__(self, other)!=Not equal to__ne__(self, other)

演算子の説明方法> __ gtより良い__(自己、その他)> = ge以上(自己、その他)<__ lt未満__(自己、その他)<= __ le以下__(self、other)== __eq __(self、other)に等しい! = __ne __(自己、他者)と等しくない

That’s all for today about operator overloading in python. Hope to be with you with more tutorials very soon. Happy Coding!

今日は、pythonでの演算子のオーバーロードについてです。すぐにもっと多くのチュートリアルがあることを願っています。ハッピーコーディング!

Reference: Python.org Docs

参照:Python.orgドキュメント

翻訳元:https://www.journaldev.com/14637/python-operator-overloading

オペレーターオーバーロードpython

Recommended Posts

演算子のオーバーロードpython_Python演算子のオーバーロード
python演算子