Pythonのポリモーフィズムとは何ですか? 例で説明されたポリモーフィズム
公開: 2021-03-05目次
序章
Pythonは、高水準で解釈されたオープンソースのプログラミング言語です。 探索的データ分析やGUIプログラミングなどの多くのタスクに役立つライブラリをサポートしているため、多くのプログラマーや開発者の間で大きな注目を集めています。また、pythonでのプログラミングは非常に興味深いものです。
この記事では、Pythonの興味深い機能について説明します。 それでは始めましょう!
ポリモーフィズムとは何ですか?
ポリモーフィズムという言葉は、ギリシャ語のポリ(多くを意味する)と射(形)から派生しています。 これは、単一の関数名またはメソッド名が複数の形式を持つことができることを意味します。 そしてこれは、実装におけるコードの重複を回避するという要望を満たします。
しかし、Pythonのポリモーフィズムは、他のプログラミング言語のポリモーフィズムとは少し異なります。 javaやc++などのプログラミング言語は、コンパイル時のポリモーフィズム(メソッドのオーバーロード)をサポートしています。 メソッドのオーバーロードでは、複数のメソッドが同じメソッド名を持つことができますが、パラメーターのシグネチャが異なります。 この機能はPythonではサポートされていません。 複数のメソッドが同じ関数を持っている場合、最新の関数実装が以前の関数実装をオーバーライドします。
関数ポリモーフィズム
Pythonの関数ポリモーフィズムは、ユーザー定義のポリモーフィズムと事前定義のポリモーフィズムの2つに分類できます。
ユーザー定義のポリモーフィズムを実装して、異なるパラメーターシグネチャを使用して同じ関数を呼び出すことができます。これは、Pythonでメソッドのオーバーロードが利用できないことに対する少しの補償と見なすことができます。 サンプルコードを見ていきましょう
def mul (a、b、c = 1 ): a * b*cを返します。 print ( mul ( 1、2、3 ) ) print(mul ( 1、2 ) ) |
上記のコードでは、渡されるパラメーターの数が等しくない場合でも、両方のprintステートメントが同じメソッドを参照しています。 2番目の関数呼び出しでは、パラメーターcにデフォルト値1が割り当てられます。
同様に、Pythonのいくつかの事前定義されたメソッドは、単一のメソッドが異なるデータ型のパラメーターを受け入れることができるポリモーフィズム機能を示します。 len()のようなメソッドは、この機能を示します。 そして、これがそれを説明するためのコードです。
print ( len ( [ 1、2、3、4 ] ) ) print ( len ( ( 1、2、3、4 ) ) ) print(len( “ python” )) print(len({ “ key1” : “ value1” 、 “ key2” : “ value2” })) |
上記のコードでは、同じlen()メソッドがリスト、タプル、文字列、および辞書に使用されています。
チェックアウト:実世界のPythonアプリケーション
演算子のオーバーロード
'+'のような演算子は、複数の方法で使用できます。 たとえば、2つの数値、文字列、リストなどを追加するために使用できます。これを示すコードを次に示します。
l1 = [ 1、2、3 ] _ _ l2 = [ 3、4、5 ] _ _ n1 = 2 n2 = 3 s1= 「ねえ」 s2= 「そこに」 print(l + l1) 印刷(s1 + s2) print(n1 + n2) |
メソッドのオーバーライド
メソッドのオーバーライドも実行時のポリモーフィズムと見なされ、Java、C ++、Pythonなどの多くの言語でサポートされています。
この機能は継承に関連しています。Pythonの子クラスは、その親クラスからメンバー関数とメンバー変数を継承します。 また、親クラスのメソッドの実装が適切でないと思われる場合は、子クラスでそのメソッドをオーバーライドできます。 また、子クラスの要件に従ってメンバー関数を変更することは、メソッドのオーバーライドと呼ばれます。
クラスtwo_wheeler : def燃料(自己): print( 「二輪車は走るのに燃料が必要」 ) def容量(自己): print( 「自転車は最大2人に適しています」 ) クラスelectric_bike (two_wheeler): def燃料(自己): print( 「電動自転車はバッテリーで動作します」 ) クラスpetrol_bike (two_wheeler): def燃料(自己): print( 「ガソリンバイクはガソリンで走る」 ) Bike = two_wheeler() ebike = electric_bike() pbike = petrol_bike() Bike.fuel() Bike.capacity() ebike.fuel() ebike.capacity() pbike.fuel() pbike.capacity() |
上記のコードでは、two_wheelerが親クラスで、electric_bike、petrol_bikeが子クラスです。 また、メソッドfuel()、capacity()は、子クラスelectric_bikeおよびpetrol_bikeに継承されます。 これで、必要に応じてメソッドの実装を更新できます。electric_bikeクラス内で、fuel()メソッドを再実装し、同様に、petrol_bikeクラスのfuel()メソッドを再実装しました。
たとえば、コードでは、ebike.fuel()は「電動自転車はバッテリーで動作します」と出力し、pbike.fuel()はガソリン自転車はガソリンで動作しますと出力します。
クラスメソッドのポリモーフィズム
Pythonでは、異なるクラスに同じメソッド名を付けることができます。これは、ポリモーフィズム機能の下にあります。 また、メソッドの呼び出しは、メソッドの呼び出しに使用するオブジェクトに基づいています。
クラス自転車: def燃料(自己): print( 「自転車は燃料を必要としません!」 ) def容量(自己): print( 「自転車は一人乗りに適しています」 ) クラスelectric_bike : def燃料(自己): print( 「電動自転車はバッテリーで動作します」 ) def容量(自己): print( 「電動自転車は最大2人に適しています」 ) クラスpetrol_bike : def燃料(自己): print( 「ガソリンバイクはガソリンで走る」 ) def容量(自己): print( 「ガソリンバイクは最大2人に適しています」 ) ecobike = bicycle() ebike = electric_bike() pbike = petrol_bike() l = [ecobike、ebike、pbike] lのobjの場合: obj.fuel() obj.capacity() |
上記のコードでは、bicycle、electric_bike、petrol_bikeの3つのクラスの3つのオブジェクトを作成しました。 そして、3つのクラスはすべて同じメソッド名を持っています。 ここで、メソッドを呼び出すために使用されるオブジェクトのタイプに基づいて、呼び出す必要のあるメソッドを決定するのはコンパイラーのタスクです。
たとえば、ecobike.fuel()はbicycleクラスのfuel()メソッドを呼び出し、ebike.fuel()はelectric_bikeクラスのfuel()メソッドを呼び出します。 これらすべてのオブジェクトをリストに追加し、すべての反復で同じ関数名を呼び出しますが、メソッドを呼び出すオブジェクトのタイプは変更されます。 最初の反復では、bicycleクラスのメソッドが呼び出され、その後の反復では、electric_bike、petrol_bikeのメソッドが呼び出されます。
読む: Pythonプロジェクトのアイデアとトピック
結論
この記事では、ポリモーフィズムの意味を理解し、メソッドのオーバーロードの場合にPythonがどのように異なるかについて説明しました。 演算子のオーバーロード、関数のポリモーフィズム、メソッドのオーバーライド、クラスメソッドのポリモーフィズムなど、Pythonでのポリモーフィズムのさまざまな可能性のデモンストレーションをウォークスルーしました。
Pythonのポリモーフィズムに気付いたので、これらすべての機能を使用して次のPythonコードを実装します。
データサイエンスについて知りたい場合は、IIIT-BとupGradのデータサイエンスのPGディプロマをチェックしてください。これは、働く専門家向けに作成され、10以上のケーススタディとプロジェクト、実践的なハンズオンワークショップ、業界の専門家とのメンターシップ、1- on-1業界のメンター、400時間以上の学習、トップ企業との仕事の支援。