Python の継承
Python の継承
継承により、親クラスからすべての機能を取得し、さらに追加できるクラスを定義できます。このチュートリアルでは、Python で継承を使用する方法を学習します。
ビデオ:Python の継承
Python での継承
継承は、オブジェクト指向プログラミングの強力な機能です。
これは、既存のクラスをほとんどまたはまったく変更せずに新しいクラスを定義することを指します。新しいクラスは 派生 (または子) クラス と呼ばれます 継承元のクラスはベース (または親) クラスと呼ばれます .
Python 継承構文
class BaseClass: Body of base class class DerivedClass(BaseClass): Body of derived class
派生クラスは、新しい機能を追加できる基本クラスから機能を継承します。これにより、コードの再利用が可能になります。
Python での継承の例
継承の使用法を示すために、例を挙げてみましょう。
多角形は、3 つ以上の辺を持つ閉じた図形です。 Polygon
というクラスがあるとします。 以下のように定義されています。
class Polygon:
def __init__(self, no_of_sides):
self.n = no_of_sides
self.sides = [0 for i in range(no_of_sides)]
def inputSides(self):
self.sides = [float(input("Enter side "+str(i+1)+" : ")) for i in range(self.n)]
def dispSides(self):
for i in range(self.n):
print("Side",i+1,"is",self.sides[i])
このクラスには、辺の数 n を格納するためのデータ属性があります sides と呼ばれるリストとしての各辺の大きさ .
inputSides()
メソッドは各辺の大きさと dispSides()
を受け取ります これらの辺の長さを表示します。
三角形は、3 つの辺を持つ多角形です。したがって、Triangle というクラスを作成できます。 Polygon から継承 .これにより、Polygon のすべての属性が作成されます Triangle で利用できるクラス クラス。
それらを再度定義する必要はありません (コードの再利用性)。 トライアングル 次のように定義できます。
class Triangle(Polygon):
def __init__(self):
Polygon.__init__(self,3)
def findArea(self):
a, b, c = self.sides
# calculate the semi-perimeter
s = (a + b + c) / 2
area = (s*(s-a)*(s-b)*(s-c)) ** 0.5
print('The area of the triangle is %0.2f' %area)
ただし、クラス Triangle
新しいメソッド findArea()
があります 三角形の面積を見つけて印刷します。これは実行例です。
>>> t = Triangle()
>>> t.inputSides()
Enter side 1 : 3
Enter side 2 : 5
Enter side 3 : 4
>>> t.dispSides()
Side 1 is 3.0
Side 2 is 5.0
Side 3 is 4.0
>>> t.findArea()
The area of the triangle is 6.00
inputSides()
のようなメソッドを定義していなくても、それを見ることができます または dispSides()
クラス Triangle
の場合
クラス自体に属性が見つからない場合、検索は基本クラスに続きます。基本クラス自体が他のクラスから派生している場合、これが再帰的に繰り返されます。
Python でのメソッドのオーバーライド
上記の例では、__init__()
に注意してください。 メソッドは両方のクラスで定義されていました Triangle 同様にポリゴン .これが発生すると、派生クラスのメソッドが基本クラスのメソッドをオーバーライドします。つまり、__init__()
トライアングルで __init__
より優先される ポリゴンで .
一般に、基本メソッドをオーバーライドするときは、単に定義を置き換えるのではなく、定義を拡張する傾向があります。同じことが、派生クラスのメソッドから基本クラスのメソッドを呼び出すことによって行われています (Polygon.__init__()
を呼び出します)。 __init__()
から Triangle
で ).
より良いオプションは、組み込み関数 super()
を使用することです .つまり、super().__init__(3)
Polygon.__init__(self,3)
と同等です であり、好ましい。 super()
について詳しく知るには Python の関数については、Python の super() 関数を参照してください。
2 つの組み込み関数 isinstance()
そして issubclass()
継承をチェックするために使用されます。
関数 isinstance()
True
を返します オブジェクトがクラスまたはそれから派生した他のクラスのインスタンスである場合。 Python のすべてのクラスは、基本クラス object
から継承されます。 .
>>> isinstance(t,Triangle)
True
>>> isinstance(t,Polygon)
True
>>> isinstance(t,int)
False
>>> isinstance(t,object)
True
同様に、issubclass()
クラスの継承をチェックするために使用されます。
>>> issubclass(Polygon,Triangle)
False
>>> issubclass(Triangle,Polygon)
True
>>> issubclass(bool,int)
True
Python