ポリモーフィズム Python 例付き

⚡ スマートサマリー

ポリモーフィズム Python 単一のインターフェースで異なる型のオブジェクトを扱うことができるため、同じメソッドや演算子でもオブジェクトによって動作が異なります。これは、演算子オーバーロード、組み込み関数、ユーザー定義メソッド、および継承を通じて実現されます。 Python プログラム。

  • 🔘 定義: ポリモーフィズムとは「多くの形態」を意味し、1つのインターフェースが異なるデータ型やクラスに対して動作することを可能にする。
  • ☑️ OperaTorの過負荷: 演算子「+」は数値を加算するだけでなく、文字列を連結する機能も持ち合わせており、演算子の多相性を示している。
  • 組み込み関数: len() などの関数は、文字列、リスト、辞書のいずれにも適用できます。
  • 🧪 ユーザー定義メソッド: クラスは、異なる形状に対して、area() や perimeter() といったメソッド名を共有できます。
  • 🛠️ 継承: メソッドのオーバーライドにより、子クラスは実行時に親クラスのメソッドを再定義できます。
  • 🤖 AIとの関連性: 機械学習ライブラリは、fit()やforward()といった共通のインターフェースをモデル間で再利用します。

ポリモーフィズム Python

ポリモーフィズムとは何ですか?

多態性は、さまざまな形で発生する状態として定義できます。これは、 Python プログラミングでは、 Python さまざまな方法で使用できます。これにより、プログラマは派生クラスで複数のメソッドを定義でき、親クラスと同じ名前になります。このようなシナリオでは、メソッドのオーバーロードがサポートされます。 Python.

ポリモーフィズム Operaトー

オペレーター Python 数学的および他のいくつかのプログラミングタスクを実行するのに役立ちます。たとえば、「+」演算子は、2つの整数型間の加算を実行するのに役立ちます。 Python同様に、同じ演算子は文字列の連結にも役立ちます。 Python プログラミング。

+(プラス)の例を見てみましょう 演算子 Python ポリモーフィズムの応用例を Python 以下のように:

Python Code:

p = 55
q = 77
r = 9.5
g1 = "Guru"
g2 = "99!"
print("the sum of two numbers",p + q)
print("the data type of result is",type(p + q))
print("The sum of two numbers",q + r)
print("the data type of result is", type (q + r))
print("The concatenated string is", g1 + g2)
print("The data type of two strings",type(g1 + g2))

出力:

the sum of two numbers 132
the data type of result is <class 'int'>

The sum of the two numbers 86.5
the data type of result is <class 'float'>

The concatenated string is Guru99!
The data type of two strings <class 'str'>

上記の例は、演算子オーバーロードの例とも言えます。

ユーザー定義メソッドのポリモーフィズム

ユーザー定義メソッドは、 Python プログラミング言語はユーザーが作成するメソッドであり、関数名とともにキーワード def を使用して宣言されます。

多型性 Python プログラミング言語は、メソッドのオーバーロードとオーバーライドによって実現されます。 Python 子クラスと親クラスの両方で、 def キーワードを使用して同じ名前のメソッドを定義します。

次のような例を見てみましょう。

Python Code:

from math
import pi
class square:
    def __init__(self, length):
    self.l = length
def perimeter(self):
    return 4 * (self.l)
def area(self):
    return self.l * self.l
class Circle:
    def __init__(self, radius):
    self.r = radius
def perimeter(self):
    return 2 * pi * self.r
def area(self):
    return pi * self.r * * 2
# Initialize the classes
sqr = square(10)
c1 = Circle(4)
print("Perimeter computed for square: ", sqr.perimeter())
print("Area computed for square: ", sqr.area())
print("Perimeter computed for Circle: ", c1.perimeter())
print("Area computed for Circle: ", c1.area())

出力:

Perimeter computed for square:  40
Area computed for square:  100
Perimeter computed for Circle:  25.132741228718345
Area computed for Circle:  50.26548245743669

上記のコードには、circle クラスと square クラスで定義された XNUMX つのユーザー定義メソッド、perimeter と area があります。

上に示したように、circle クラスと square クラスの両方が、ポリモーフィズムの特性を示す同じメソッド名を呼び出して、必要な出力を提供します。

関数におけるポリモーフィズム

組み込み関数 Python 複数のデータ型を実行できるように設計され、互換性があります。 Pythonlen() は重要な組み込み関数の 1 つです。

この関数は、リスト、タプル、文字列、辞書など、複数のデータ型に対応しています。len() 関数は、これらの多くのデータ型に対応した正確な情報を返します。

次の図は、ポリモーフィズムがどのように適用されるかを示しています。 Python 組み込み関数に関して: –

関数におけるポリモーフィズム

次のプログラムは、ポリモーフィズムの応用を説明するのに役立ちます。 Python: -

Python Code:

print ("The length of string Guru99 is ",len("Guru99"))
print("The length of list is ",len(["Guru99","Example","Reader"]))
print("The length of dictionary is ",len({"Website name":"Guru99","Type":"Education"}))

出力:

The length of string Guru99 is 6
The length of the list is 3
The length of the dictionary is 2

関数におけるポリモーフィズム

上記の例では、len() 関数は Python それぞれ文字列、リスト、辞書データ型に対してポリモーフィズムを実行します。

ポリモーフィズムと継承

継承 Python 定義された子クラスが、存在する別の基本クラスからプロパティを継承するプログラミング概念として定義できます。 Python.

鍵はXNUMXつあります Python メソッドのオーバーライドとメソッドのオーバーロードと呼ばれる概念。

  • メソッドのオーバーロードでは、 Python 特定のコード内で異なる機能を実行するために、同じ名前のメソッドを作成する機能を提供します。メソッドをオーバーロードし、それらを使用してより単純な方法でさまざまなタスクを実行できます。
  • メソッドオーバーライドでは、 Python 親クラスと子クラスで同様の名前を共有する値をオーバーライドします。

以下に示すポリモーフィズムと継承の例を見てみましょう。

Python Code:

class baseclass:
    def __init__(self, name):
    self.name = name
def area1(self):
    pass
def __str__(self):
    return self.name
class rectangle(baseclass):
    def __init__(self, length, breadth):
    super().__init__("rectangle")
self.length = length
self.breadth = breadth
def area1(self):
    return self.length * self.breadth
class triangle(baseclass):
    def __init__(self, height, base):
    super().__init__("triangle")
self.height = height
self.base = base
def area1(self):
    return (self.base * self.height) / 2
a = rectangle(90, 80)
b = triangle(77, 64)
print("The shape is: ", b)
print("The area of shape is", b.area1())
print("The shape is:", a)
print("The area of shape is", a.area1())

出力:

The shape is: a triangle
The area of a shape is 2464.0

The shape is: a rectangle
The area of a shape is 7200

上記のコードでは、メソッドの名前は init メソッドと area1 メソッドとして定義されています。 次に、正方形と長方形のクラスのオブジェクトを使用して XNUMX つのメソッドを呼び出し、さまざまなタスクを実行し、正方形と長方形の領域の出力を提供します。

クラスメソッドによるポリモーフィズム

その Python プログラミングでは、クラスメソッドを使用してポリモーフィズムとメソッドのオーバーロードを実現できます。 Python 同じ名前で宣言されたメソッドを持つことができる Python コー​​ド。

In Python2 つの異なるクラスを定義できます。1 つは子クラスで、親クラスと呼ばれる別の定義済みクラスから属性を派生します。

次の例は、クラスメソッドによるポリモーフィズムの概念を示しています。

Python Code:

class amazon:
    def __init__(self, name, price):
    self.name = name
self.price = price
def info(self):
    print("This is product and am class is invoked. The name is {self.name}. This costs {self.price} rupees.")
class flipkart:
    def __init__(self, name, price):
    self.name = name
self.price = price
def info(self):
    print(f "This is product and fli class is invoked. The name is {self.name}. This costs {self.price} rupees.")
FLP = flipkart("Iphone", 2.5)
AMZ = amazon("Iphone", 4)
for product1 in (FLP, AMZ):
    product1.info()

出力:

This is a product, and fli class is invoked. The name is iPhone, and this costs 2.5 rupees.
This is a product, and am class is invoked. The name is iPhone, and this costs 4 rupees.

上記のコードでは、flipkartとamazonという2つの異なるクラスが同じメソッド名infoとinitを使用して、それぞれの製品の価格見積もりを提供し、さらにポリモーフィズムの概念を示しています。 Python.

メソッドのオーバーロードとコンパイル時のポリモーフィズムの違い

コンパイル時ポリモーフィズムでは、 Python プログラムは呼び出しを解決します。コンパイル時のポリモーフィズムはメソッドのオーバーロードによって実現されます。

その Python コンパイラは、ポリモーフィズムのために実行時に呼び出しを解決しません。また、同じメソッドが同様のシグネチャまたはプロパティを持ちながら、異なるクラスの一部を形成するメソッド オーバーライドとしても分類されます。

よくあるご質問

ダックタイping ラトビアの Python オブジェクトをクラス型ではなく、それが提供するメソッドで判断する。必要なメソッドを備えていれば、それは機能する。「アヒルのように歩き、アヒルのように鳴くなら、それはアヒルだ」という考え方に基づいている。

従来はそうではありませんでした。2つのメソッドが同じ名前を持つ場合、最後に定義されたものが優先されます。 Python 代わりに、デフォルト引数、可変長 *args、または functools.singledispatch デコレータを使用してオーバーロードをシミュレートし、単一の関数内で異なる引数タイプを処理します。

腹筋tracabcモジュールのt基底クラスは、すべてのサブクラスが実装しなければならないメソッドを宣言します。これらは共有インターフェースを強制するため、関連性のないサブクラスをポリモーフィックに使用できます。 Python それぞれが必要な方法を提供することを保証します。

ポリモーフィズムは、コードの再利用性、柔軟性、拡張性を向上させます。1つの関数またはインターフェースで複数のオブジェクト型を処理できるため、重複が減り、メンテナンスが簡素化され、既存のコードを書き直すことなく新しいクラスを追加できます。

はい。ダックタイを通してping同じメソッドを実装する無関係なクラスは、共通の親クラスを持たずに相互に交換して使用できます。 Operaオーバーロードやlen()などの組み込み関数も、継承なしでポリモーフィズムを提供します。

ポリモーフィズムは、1つの関数が文字列、リスト、またはカスタムオブジェクトを処理する場合、データベースドライバが複数のエンジンにわたって単一のAPIを公開する場合、および多くのウィジェットが1つのインターフェースを介して呼び出されるdraw()またはupdate()メソッドを共有するGUIツールキットで発生します。

AIフレームワークはポリモーフィズムに依存しています。Torchでは、すべてのモデルがnn.Moduleをサブクラス化し、forward()をオーバーライドします。scikit-learnでは、推定器はfit()とpredict()メソッドを共有するため、異なるアルゴリズムが1つの一貫性のある交換可能なインターフェースを介して実行されます。

はい。GitHub CopilotとエージェントAIアシスタントは、ダックタイプの関数を生成し、アブソリュートを提案します。trac短いプロンプトから、基本クラスを作成し、繰り返し行われるメソッドをポリモーフィックな設計にリファクタリングします。 Rev出力結果を確認して、ロジックとインターフェースが正しいことを確認してください。