工業製造
産業用モノのインターネット | 工業材料 | 機器のメンテナンスと修理 | 産業プログラミング |
home  MfgRobots >> 工業製造 >  >> Industrial programming >> Python

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

  1. Python データ型
  2. Python 演算子
  3. Python pass ステートメント
  4. Python 辞書
  5. Python カスタム例外
  6. Python オブジェクト指向プログラミング
  7. Python 演算子のオーバーロード
  8. Python @property デコレーター
  9. Python の type() と isinstance() と例
  10. C# - 継承
  11. Python-オブジェクト指向