Python
 Computer >> コンピューター >  >> プログラミング >> Python

Pythonのポリモーフィズム


ポリモーフィズムとは、複数の形態を意味します。 Pythonでは、同じ演算子または関数が複数の形式をとっているのを見つけることができます。また、同じ名前のクラスメソッドを持つさまざまなクラスを作成する場合にも役立ちます。これは、多くのコードを再利用するのに役立ち、コードの複雑さを軽減します。以下のいくつかの例でわかるように、ポリモーフィズムは継承にもリンクしています。

演算子のポリモーフィズム

+演算子は、2つの入力を受け取り、入力が何であるかに応じて結果を提供できます。以下の例では、整数入力がどのように整数を生成するかを確認できます。入力の1つがfloatの場合、結果はfloatになります。文字列の場合も、それらは単に連結されます。これは、Pythonで+演算子が作成される方法のために自動的に行われます。

a = 23
b = 11
c = 9.5
s1 = "Hello"
s2 = "There!"
print(a + b)
print(type(a + b))
print(b + c)
print(type (b + c))
print(s1 + s2)
print(type(s1 + s2))

上記のコードを実行すると、次の結果が得られます-

出力

34
20.5
HelloThere!

組み込み関数のポリモーフィズム

また、さまざまなPython関数がさまざまなタイプの入力を受け取り、それらをさまざまに処理できることもわかります。 len()に文字列値を指定すると、その中のすべての文字がカウントされます。ただし、入力として5つのタプルまたは辞書を使用すると、処理が異なります。

str = 'Hi There !'
tup = ('Mon','Tue','wed','Thu','Fri')
lst = ['Jan','Feb','Mar','Apr']
dict = {'1D':'Line','2D':'Triangle','3D':'Sphere'}
print(len(str))
print(len(tup))
print(len(lst))
print(len(dict))

上記のコードを実行すると、次の結果が得られます-

出力

10
5
4
3

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

同じ名前で、異なるクラス名でラップされたメソッドを作成できます。したがって、異なるクラス名が前に付けられた同じメソッドを呼び出し続けて、異なる結果を得ることができます。次の例では、同じメソッドを使用して周囲長と面積を取得するために、長方形と円の2つのクラスがあります。

from math import pi

class Rectangle:
   def __init__(self, length, breadth):
      self.l = length
      self.b = breadth
   def perimeter(self):
      return 2*(self.l + self.b)
   def area(self):
      return self.l * self.b

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
rec = Rectangle(5,3)
cr = Circle(4)
print("Perimter of rectangel: ",rec.perimeter())
print("Area of rectangel: ",rec.area())

print("Perimter of Circle: ",cr.perimeter())
print("Area of Circle: ",cr.area())

上記のコードを実行すると、次の結果が得られます-

出力

Perimter of rectangel: 16
Area of rectangel: 15
Perimter of Circle: 25.132741228718345
Area of Circle: 50.26548245743669

  1. Pythonでの二分木の直径

    二分木があるとしましょう。木の直径の長さを計算する必要があります。二分木の直径は、実際には、ツリー内の任意の2つのノード間の最長パスの長さです。このパスは必ずしもルートを通過する必要はありません。したがって、ツリーが以下のようになっている場合、パスの長さ[4,2,1,3]または[5,2,1,3]は3であるため、直径は3になります。 これを解決するには、次の手順に従います- dfsを使用して直径を見つけ、答えを設定します:=0 ルートdfs(root)を使用してdfs関数を呼び出します dfsは以下のdfs(node)のように機能します ノードが存在しない場合は、0を返します 左

  2. Pythonでの継承

    この記事では、Python3.xでの継承と拡張クラスについて学習します。またはそれ以前。 継承は実際の関係をうまく表し、再利用性を提供し、推移性をサポートします。開発時間が短縮され、メンテナンスが容易になり、拡張も容易になります。 継承は大きく5つのタイプに分類されます- シングル 複数 階層的 マルチレベル ハイブリッド 上の図に示されているように、継承とは、実際に親クラスのオブジェクトを作成せずに、他のクラスの機能にアクセスしようとするプロセスです。 ここでは、単一の階層型継承の実装について学習します。 単一継承 例 # parent class class Studen