👌

Pythonでのメソッドオーバーロードとメソッドオーバーライドの違いは?

2023/01/31に公開

概要

メソッドのオーバーロードとメソッドのオーバーライドという用語は、オブジェクト指向プログラミング言語で非常に重要な 2 つの用語です。これにより、同じ名前でさまざまな種類の機能を処理できるメソッドを記述できます。 2 つ以上のメソッドの名前が同じで、パラメーターの数が異なるか、パラメーターの型が異なるか、またはその両方が異なる場合、それはメソッドのオーバーロードと呼ばれます。 同時に、サブクラスまたは子クラスが、親クラスまたはスーパークラスで既に定義されている特定の特性または提供されたデータの特定の実装プロセスをプログラムに提供できる場合、そのプロセスはメソッドのオーバーライドとして知られています。

記事の範囲

  • この記事では、適切な例とコードを使用して、メソッドのオーバーロードとメソッドのオーバーライドの違いを学びます。
  • また、Python でメソッドのオーバーロードとメソッドのオーバーライドを使用することの長所と短所についても学びます。
  • また、Python でメソッドのオーバーロードとメソッドのオーバーライドの両方を実装する方法についても説明します。

序章

メソッドのオーバーロードの過程で、同じクラスに同じ名前で異なるパラメーター リストを使用して 2 つ以上のメソッドを定義できることが既にわかっているように (つまり、内部で渡されるパラメーターは互いに異なる必要があります)。 メソッドのオーバーロードは、コンパイル時のポリモーフィズムの一種です。

メソッドのオーバーライドとは、あるクラスが別のクラスで宣言されたものと同じ関数名を使用する場合であり、このプロセスはメソッドのオーバーライドとして知られていると定義できます。 簡単に言えば、子クラスである1つのクラスで、その親クラスの1つによって宣言されたメソッドの特定の実装が提供される場合、それはPythonでのメソッドオーバーライドとして知られていると言えます。 メソッドのオーバーライドは、Python のランタイム ポリモーフィズムの一種です。

それでは、例を使ってそれぞれについて詳しく読んでみましょう。

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

メソッドのオーバーロードの過程で、同じ名前で同じクラスに2つ以上のメソッドを定義できますが、パラメーターリストが異なります(つまり、内部で渡されるパラメーターは互いに異なる必要があります)。 パイソン。 したがって、Python はメソッドのオーバーロードをサポートしていません。その理由は、プロセスで渡された異なるパラメーター リストを使用して同じ名前の複数の関数を定義すると、後者の関数が常に前の関数をオーバーライドするため、名前空間には常に 各関数名に対して 1 つのエントリがあり、メソッドの最新の定義のみが使用されます。

メソッドを呼び出す方法が常に複数存在するようにメソッドを定義することで、コードをオーバーロードできます。 次に、例を使用してこれを実装する方法を見てみましょう。

まず、上記の疑似コードを使用して、メソッドのオーバーロードの概念を理解しましょう。

   def sum1(a,b):
      return a+b
    def sum1(a,b,c):
      return a+b+c
    add(2,3)

ここで、関数名 sum1 が両方の関数で同じであることがわかりますが、関数内で渡されるパラメーターが異なるだけです.. エディターで上記のコードを実行すると、より適切で明確な説明が得られます。
理解を深めるために、別の例を見てみましょう。

#Function to take multiple arguments
def fina_res(*args):
    # variable to store the sum of numbers    
    sum1 = 0
    
    # accessing the arguments
    for I in args:
        sum1 += i
    
    # Output
    print("Sum of the number are : ", sum1)

    
#Driver Code
if(__name__ == "__main__"):
    print("Method overloading in python:\n")
    print("Function when only one parameter is passed inside it  ->", end = " ")
    fina_res(1520)

    print("Function when only two parameter are passed inside it      ->", end = " ")
    fina_res(1324, 4567)

    print("Function when mulltiple parameters are passed inside it  ->", end = " ")
    fina_res(12,45,6,7,12)

出力

Method overloading in python:

Function, when only one parameter is passed inside it, -> Sum:  1520
Function, when only two parameters are passed inside it, -> Sum: 5891
Function, when multiple parameters are passed inside it, -> Sum: 82

上記のコードでは、Python でメソッドのオーバーロードを実装する方法を見てきました。 上記のコードをエディターで実行すると、より適切で明確な説明が得られます。
それでは、例を使ってメソッドのオーバーライドについて詳しく読んでみましょう。

メソッドのオーバーライド

Python でのメソッドのオーバーライドは、子クラスが親クラスで宣言されたものと同じ関数名を使用するプロセスであることは既にわかっているため、このプロセスはメソッドのオーバーライドとして知られています。 簡単に言えば、子クラスであるサブクラスが、その親クラスの 1 つによって宣言されたメソッドの特定の実装を提供する場合を言うことができます。 関数のオーバーライドは、クラス内では実行できません。 親クラスから子クラスを派生させる必要があります。

まず、上記の疑似コードを使用して、メソッドのオーバーロードの概念を理解しましょう。

#parent class
class employee:
  #properties
	emp1 = True
	# Eukaryotic means Cells with Nucleus
	emp2 = True
	
	# function breath
	def calculate(self):
	    print("Method overriding is an important concept in python. It follows the run time polymorphism")
    
  #function feed
	def calculate1(self):
	    print("Method overriding is an important concept in python. It follows the run time polymorphism. In this article we will read about both method overloading and overriding")
	    
#child class	    
class employee2(employee):
    
    # function feed
	def calculate(self):
	    print("Method over riding is an important concept in python. It follows the run time polymorphism. In this article we will read about both method overloading and riding")

emp = employee2()
emp.calculate()
#calling some other function
emp.calculate1()

出力

Method overriding is an important concept in python. It follows the run time polymorphism. In this article, we will read about both methods of loading and overriding. Method overriding is an important concept in python. It follows the run time polymorphism.

この例では、Python でメソッドのオーバーライドの概念を実装しました。 別のクラスで同じ関数名を呼び出すことにより、継承も行われます。 上記のコードをエディターで実行すると、より適切で明確な説明が得られます。

次に、Python でメソッドのオーバーライドのプロセスを実装する方法の別の例を見てみましょう。

# the parent class or the main class
class calculate_1:
    def ayush(self):
        print("There were 10 subjects in total")

    def ayush_1(self):
        print('He could only pass in 4 subjects')

# This is the derived class 
class calculate_2(calculate_1):
    # in this step we are overriding the  function
    def ayush(self):
        print("here we are using the concept of method overriding which we have studied")

    def print_1(self):
        print('Here we are printing the child class')

# Driver Code
if(__name__ == "__main__"):
    # Creating child class object
    child_obj = calculate_1()
    
    # Calling the overridden method
    print("This is known as method overriding\n")
    child_obj.first()
    
    # Calling the original Parent class method
    # Using parent class object.
    calculate().first()

出力

Method overriding in python
here we are using the concept of method overriding which we have studied
'Here we are printing the child class'

上記のコードでは、Python でメソッドのオーバーライドを実装する方法を見てきました。 上記のコードをエディターで実行すると、より適切で明確な説明が得られます。

次に、Python でのメソッドのオーバーロードとメソッドのオーバーライドの違いについて読みましょう。

Python でのメソッドのオーバーロードとメソッドのオーバーライドの違い:

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

  • メソッドのオーバーロードは、同じ名前のメソッドが 1 つしかなく、関数内で渡される引数またはパラメーターの数が異なるプロセスです。
  • メソッドのオーバーロードのタイプは、コンパイル型ポリモーフィズムです。
    メソッドのオーバーロードは、同じクラス内で発生します。
  • 残念ながら、この記事で説明したように、Python はメソッドのオーバーロードの概念をサポートしていません。
  • メソッドのオーバーロードにより、コードの再利用性が向上します。
  • メソッドのオーバーロードの場合、パラメーター リストは異なる必要があります。
  • オーバーロードされたメソッドのバインドは、コンパイル時に行われます。
  • メソッドのオーバーロードは、メソッドの動作にさらに追加するために使用されます。
  • メソッドのオーバーロードでは、継承の概念が必要な場合と必要でない場合があります。
  • メソッドのオーバーロードでは、複数のクラスは必要ないため、メソッドのオーバーロードは 1 つのクラスでのみ行われます。
  • メソッドのオーバーロードでは、継承は必須ではありません。
  • メソッドのオーバーロードの過程で、戻り値の型は同じでも異なっていてもかまいません。

Python でのメソッドのオーバーライド:

  • メソッドのオーバーライドは、子クラスが親クラスで宣言されたものと同じ関数名を使用するプロセスであり、このプロセスはメソッドのオーバーライドとして知られています。 簡単に言えば、子クラスであるサブクラスが、その親クラスの 1 つによって宣言されたメソッドの特定の実装を提供する場合を言うことができます。
  • メソッドのオーバーライド プロセスでは、2 つのクラスが必要です。
  • オーバーライドされたメソッドのバインドは実行時に行われるため。 したがって、これはランタイム ポリモーフィズムの一部です。
  • メソッドでは、継承をオーバーライドする必要があります。
  • メソッドをオーバーライドするプロセスでは、メソッドは同じ名前と同じパラメーターを持つ必要があります。
  • Python ではサポートされていないことがわかっているメソッドのオーバーロードとは異なり、メソッドのオーバーライドのプロセスは Python でサポートされています。
  • メソッドのオーバーライドのプロセスは、親クラスのメソッドと子クラスのメソッドの間で行われます。
  • メソッドのオーバーライドのプロセスは、既存のメソッドの動作を変更するために使用されます。
    戻り値の型は、メソッドのオーバーライドのプロセスで同じまたは共変でなければなりません。
  • メソッドオーバーライドのプロセスが2つのクラスで発生することがわかっているため、IS-A(継承)関係があります。

結論

  • メソッドのオーバーロードのプロセスは Python ではサポートされていません。メソッドをオーバーロードすることはできますが、Python では最新の定義済みメソッドのみが使用されます。
  • メソッドのオーバーライドのプロセスには、実装のための継承が必要です。
  • プロセス メソッドのオーバーロードとメソッドのオーバーライドの両方が、ポリモーフィズムの主要な概念です。
  • メソッドのオーバーロードはコンパイル時のポリモーフィズムであり、メソッドのオーバーライドは実行時のポリモーフィズムです。
  • メソッドのオーバーロードには 1 つのクラスのみが必要ですが、メソッドのオーバーライドには最低 2 つのクラスが必要です。
  • メソッドのオーバーロードは、コードの再利用性を向上させるために使用されます。
    静的メソッドはメソッドのオーバーロードでオーバーロードできますが、静的メソッドはメソッドの- オーバーライドでオーバーライドできません。

Discussion