Python
 Computer >> コンピューター >  >> プログラミング >> Python

オーバーロード演算子はPythonでどのように機能しますか?


+演算子を使用して数値を追加すると同時に、文字列を連結できることはわかっています。これが可能なのは、+演算子がintクラスとstrクラスの両方によってオーバーロードされているためです。演算子は基本的にそれぞれのクラスで定義されたメソッドです。演算子のメソッドの定義は、演算子のオーバーロードと呼ばれます。たとえばカスタムオブジェクトで+演算子を使用するには、__add__というメソッドを定義する必要があります。

次のコードは、演算子のオーバーロードがどのように機能するかを簡単に理解できるようにします

import math
class Circle:
     def __init__(self, radius):
        self.__radius = radius
     def setRadius(self, radius):
        self.__radius = radius
     def getRadius(self):
        return self.__radius
     def area(self):
        return math.pi * self.__radius ** 2
     def __add__(self, another_circle):
        return Circle( self.__radius + another_circle.__radius )
c1 = Circle(3)
print(c1.getRadius())
c2 = Circle(6)
print(c2.getRadius())
c3 = c1 + c2 # This is because we have overloaded + operator by adding a method  __add__
print(c3.getRadius())
を追加して+演算子をオーバーロードしたためです。 出力

これにより、出力が得られます

3
6
9

ユーザー定義型で機能するように演算子の動作を変更することを、演算子のオーバーロードと呼びます。 Pythonのすべての演算子には、__add__のような対応する特別なメソッドがあります。詳細については、docs.python.org / ref/specialnames.htmlを参照してください。



  1. \ B正規表現はPythonでどのように機能しますか?

    単語の境界\bは、片側が単語の文字(通常は文字、数字、または下線)である位置に一致します \ Bは、\bが一致しないすべての位置に一致します。 次のコードは、regexpr\Bがどのように機能するかを示しています import re result = re.findall(r'\Bcat', 'certificate') result2 = re.findall(r'\Bcat', 'tomcat') result3 = re.findall(r'\Bcat', 'catfish') print

  2. Pythonファイルでアンダースコア_はどのように機能しますか?

    アンダースコア(_)はPythonでは特別です。 Pythonでアンダースコアを使用する場合は5つあります。 1.インタプリタに最後の式の値を格納するため。 Pythonインタープリターは、最後の式の値を「_」と呼ばれる特別な変数に格納します。 例 >>> 12 + 10 22 >>> _ 22 2.特定の値を無視するため。 アンダースコアは、elixir、erlang、pythonなどのいくつかの言語で特定の値を無視するためにも使用されます。特定の値が不要な場合、または値が使用されていない場合は、値をアンダースコアに割り当ててください。 例 >