Python での関数のオーバーロード
この記事では、Python 関数のオーバーロードとその実行方法について説明します。以下に、従うためのメソッドとサンプルプログラムを含めました。
定義のオーバーロード
プログラミングでは、オーバーロードという用語は、関数に格納されている引数とパラメーターに基づいて、関数がさまざまな方法で動作するのに役立ちます。オーバーロードにより、プログラムを繰り返し再利用できます。たとえば、互いにあまり異ならない複数のメソッドを渡す代わりに、1つのメソッドのみを渡すことができ、オーバーロードすることができます。関数をオーバーロードすると、プログラムがより明確になり、複雑さが軽減されます。
いくつかのオーバーロードされた関数を管理しているときに混乱が生じるため、このプロセスを過度に使用しないでください。
Python での関数のオーバーロード
Python では、関数に多くの引数またはパラメーターを渡すことで、関数を作成して数回呼び出すことができます。異なる引数またはパラメーターを使用して同じ関数を何度も呼び出すこのプロセスは、関数のオーバーロードと呼ばれます。
class Home:
def Knock(self, person_one=None, person_two=None):
if person_one is not None and person_two is None:
print("Hi, " + person_one)
elif person_one is not None and person_two is not None:
print("Hi, " + person_one + " and " + person_two)
else:
print("Who's there? ")
DefObj = Home()
DefObj.Knock()
DefObj.Knock("Rick", "Morty")
DefObj.Knock("Sam")
このプログラムでは、最初に Home
と呼ばれるクラスを定義します。このクラスで関数 Knock
を定義します。その後、if-else
条件ステートメントは、さまざまな入力に基づいてさまざまな条件を提供します。次に、メインクラス Home
が関数 Knock
を呼び出すために使用する DefObj
というオブジェクトを作成します。最後に、異なる引数を使用して関数ノック
を複数回呼び出しました。したがって、このプログラムでは関数のオーバーロードを使用しました。
Python で Multiple Dispatch Decorator を使用して関数のオーバーロードを実行する
Python のデコレータは、プログラム内の特定のクラスまたは関数の動作を変更するのに役立つツールです。これらは、他の関数を追加して、実際に変更せずに既存の関数を変更するために使用されます。
ディスパッチデコレータは、指定されたタイプのリストに基づいて、同じ抽象関数からの多数の実行から実装を選択するのに役立ちます。
以下のサンプルプログラムを見てください。
from multipledispatch import dispatch
@dispatch(float, float, float)
def summation(float_1, float_2, float_3):
total = float_1 + float_2 + float_3
print(total)
@dispatch(int, int, int)
def difference(int_1, int_2, int_3):
diff = int_1 - int_2 - int_3
print(diff)
@dispatch(int, int, int)
def multiply(int_1, int_2, int_3):
product = int_1 * int_2 * int_3
print(product)
summation(6.9, 3.14, 7.12)
difference(9, 6, 3)
product(3, 3, 3)
出力:
17.16
0
27
ここでは、任意のデータ型をディスパッチャに渡すことができます。ディスパッチャは、さまざまな実装を持つオブジェクトを作成するために使用されます。実行時に、関数名、引数の数、および引数のデータ型を使用するだけで、適切な関数が選択されます。
Lakshay Kapoor is a final year B.Tech Computer Science student at Amity University Noida. He is familiar with programming languages and their real-world applications (Python/R/C++). Deeply interested in the area of Data Sciences and Machine Learning.
LinkedIn