logo

パイソン |メソッドのオーバーロード

メソッドのオーバーロード:

データリンク層プロトコル

2 つ以上のメソッドの名前は同じですが、パラメータの数またはパラメータの種類、あるいはその両方が異なります。これらのメソッドはオーバーロードされたメソッドと呼ばれ、これはメソッドと呼ばれます 過負荷



他の言語と同様に (たとえば、 C++ でのメソッドのオーバーロード ) を実行しますが、Python はデフォルトではメソッドのオーバーロードをサポートしません。ただし、Python でメソッドのオーバーロードを実現するにはさまざまな方法があります。

Python でのメソッドのオーバーロードの問題は、メソッドをオーバーロードする可能性があるにもかかわらず、最新に定義されたメソッドしか使用できないことです。

Python3








# First product method.> # Takes two argument and print their> # product> def> product(a, b):> >p>=> a>*> b> >print>(p)> # Second product method> # Takes three argument and print their> # product> def> product(a, b, c):> >p>=> a>*> b>*>c> >print>(p)> # Uncommenting the below line shows an error> # product(4, 5)> # This line will call the second product method> product(>4>,>5>,>5>)>

>

>

出力

100>

上記のコードでは 2 つの積メソッドを定義しましたが、Python はメソッドのオーバーロードをサポートしていないため、2 番目の積メソッドのみを使用できます。同じ名前で異なる引数のメソッドを多数定義できますが、使用できるのは最後に定義されたメソッドのみです。他のメソッドを呼び出すとエラーが発生します。ここに電話しているように 製品(4,5) 最新に定義されたプロダクト メソッドは 3 つの引数を取るため、エラーが発生します。

したがって、上記の問題を解決するには、さまざまな方法を使用してメソッドのオーバーロードを実現できます。

方法 1 (最も効率的な方法ではありません):

引数を使用すると、同じ関数を異なる動作、つまり引数に従って動作させることができます。

Python3




# Function to take multiple arguments> def> add(datatype,>*>args):> ># if datatype is int> ># initialize answer as 0> >if> datatype>=>=> 'int'>:> >answer>=> 0> ># if datatype is str> ># initialize answer as ''> >if> datatype>=>=> 'str'>:> >answer>=> ''> ># Traverse through the arguments> >for> x>in> args:> ># This will do addition if the> ># arguments are int. Or concatenation> ># if the arguments are str> >answer>=> answer>+> x> >print>(answer)> # Integer> add(>'int'>,>5>,>6>)> # String> add(>'str'>,>'Hi '>,>'Geeks'>)>

>

>

出力

11 Hi Geeks>

方法 2 (効率的ではありません):

Pythonでメソッドのオーバーロードを実現するには、ユーザー定義関数を使用します。 なし キーワードをデフォルトパラメータとして使用します。

コードの説明:

add メソッドの最初のパラメータは None に設定されます。これにより、パラメーターを指定して呼び出すかどうかを選択できます。

add メソッドに引数を渡すと (作業中):

  • このメソッドは、両方のパラメータが使用可能かどうかを確認します。
  • すでにデフォルトのパラメータ値を None として指定しているため、値が渡されない場合は None のままになります。
  • If-Else ステートメントを使用すると、各パラメーターを単一のステートメントとしてチェックすることでメソッドのオーバーロードを実現できます。

Python3




# code> def> add(a>=>None>, b>=>None>):> ># Checks if both parameters are available> ># if statement will be executed if only one parameter is available> >if> a !>=> None> and> b>=>=> None>:> >print>(a)> ># else will be executed if both are available and returns addition of two> >else>:> >print>(a>+>b)> # two arguments are passed, returns addition of two> add(>2>,>3>)> # only one argument is passed, returns a> add(>2>)>

>

>

出力

5 2>

上記のメソッドの問題は、複数の if/else ステートメントによりコードがより複雑になり、メソッドのオーバーロードを実現する望ましい方法ではないことです。

方法 3 (効率的な方法):

複数のディスパッチ デコレータを使用する

Multiple Dispatch Decorator は次の方法でインストールできます。

pip3 install multipledispatch>

pip がデバイスにインストールされていない場合:

Windowsの場合はここをクリックしてください

jvm

Linuxの場合はここをクリックしてください

Python3




from> multipledispatch>import> dispatch> # passing one parameter> @dispatch>(>int>,>int>)> def> product(first, second):> >result>=> first>*>second> >print>(result)> # passing two parameters> @dispatch>(>int>,>int>,>int>)> def> product(first, second, third):> >result>=> first>*> second>*> third> >print>(result)> # you can also pass data type of any value as per requirement> @dispatch>(>float>,>float>,>float>)> def> product(first, second, third):> >result>=> first>*> second>*> third> >print>(result)> # calling product method with 2 arguments> product(>2>,>3>)># this will give output of 6> # calling product method with 3 arguments but all int> product(>2>,>3>,>2>)># this will give output of 12> # calling product method with 3 arguments but all float> product(>2.2>,>3.4>,>2.3>)># this will give output of 17.985999999999997>

>

>

出力:

6 12 17.985999999999997>

バックエンドでは、Dispatcher はさまざまな実装を格納するオブジェクトを作成し、実行時に渡されるパラメーターのタイプと数として適切なメソッドを選択します。