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

Pythonのクラス継承とは?基本構文から多重継承・isinstanceまで徹底解説

Pythonでは、ゼロからクラスを作り上げる必要はありません。既存のクラスを基にして新しいクラスを派生させることができます。その方法は非常にシンプルで、新しいクラス名の後ろに括弧を付けて親クラスを指定するだけです。

このようにして作られた子クラス(派生クラス)は、親クラス(基底クラス)が持つ属性をすべて引き継ぎます。継承された属性は、子クラス自身で定義したものとまったく同じように扱えます。さらに、子クラス側で親クラスのデータメンバーやメソッドを上書き(オーバーライド)することも可能です。

継承の基本構文

派生クラスの宣言方法は親クラスとほぼ同じですが、クラス名の後ろに継承元となる基底クラスのリストを指定する点が異なります。

class SubClassName(ParentClass1[, ParentClass2, ...]):
    '任意のクラスドキュメント文字列'
    class_suite

継承のサンプルコード

以下は、親クラス Parent を継承して子クラス Child を定義し、それぞれのメソッドを呼び出す例です。

#!/usr/bin/python3
class Parent:  # 親クラスを定義
    parentAttr = 100

    def __init__(self):
        print("親クラスのコンストラクタを呼び出し")

    def parentMethod(self):
        print('親クラスのメソッドを呼び出し')

    def setAttr(self, attr):
        Parent.parentAttr = attr

    def getAttr(self):
        print("親クラスの属性 :", Parent.parentAttr)

class Child(Parent):  # 親クラスを継承した子クラスを定義
    def __init__(self):
        print("子クラスのコンストラクタを呼び出し")

    def childMethod(self):
        print('子クラスのメソッドを呼び出し')

c = Child()          # 子クラスのインスタンスを生成
c.childMethod()      # 子クラス自身のメソッドを呼び出す
c.parentMethod()     # 継承された親クラスのメソッドを呼び出す
c.setAttr(200)       # 親クラスのメソッドを再度呼び出す
c.getAttr()          # 親クラスのメソッドを再度呼び出す

実行結果

上記のコードを実行すると、次のような結果が出力されます。

子クラスのコンストラクタを呼び出し
子クラスのメソッドを呼び出し
親クラスのメソッドを呼び出し
親クラスの属性 : 200

このように、子クラスのインスタンスからでも親クラスのメソッドや属性をそのまま利用できることが分かります。

多重継承

Pythonでは、複数の親クラスから1つの子クラスを派生させる「多重継承」もサポートされています。以下のように、括弧内に親クラスをカンマ区切りで並べるだけで実現できます。

class A:  # クラスAを定義
    .....

class B:  # クラスBを定義
    .....

class C(A, B):  # AとBの両方を継承したサブクラス
    .....

クラスの関係を確認する組み込み関数

クラス同士、あるいはインスタンスとクラスの継承関係をプログラム中で確認したい場合は、issubclass() 関数や isinstance() 関数が便利です。

  • issubclass(sub, sup):指定したサブクラス sub が、スーパークラス sup の実際のサブクラスである場合に True を返すブール関数です。
  • isinstance(obj, Class):obj がクラス Class のインスタンス、または Class を継承したサブクラスのインスタンスである場合に True を返すブール関数です。

継承を活用することで、共通の機能を持つコードを再利用でき、重複のない保守性の高いプログラムを書くことができます。

  1. 【C++入門】多重継承の基本と実装方法をわかりやすく解説

    多重継承(Multiple Inheritance)とは多重継承とは、ひとつのクラスが複数の基底クラス(親クラス)から派生する仕組みのことです。多重継承を利用することで、派生クラスは複数の基底クラスが持つ機能やデータメンバをまとめて引き継ぐことができます。これはC++に代表されるオブジェクト指向プログラミング言語における重要な機能のひとつです。多重継承の構造を表した図が以下になります。C++で多重継承を実装するサンプルプログラムここでは、C++で多重継承を実装したサンプルプログラムを紹介します。クラスCが、クラスAとクラスBの2つのクラスを同時に継承する例です。サンプルコード#include

  2. Pythonの継承とは?単一継承と階層継承の基本をサンプルコードで解説

    本記事では、Python 3.xにおける継承(インヘリタンス)とクラスの拡張方法について詳しく解説します。 継承とは、現実世界のモノや概念の関係性を自然に表現できる、オブジェクト指向プログラミングの中核となる仕組みです。継承を活用すると、次のようなメリットが得られます。 再利用性:すでに書いたコードを流用でき、重複を削減できる 推移性:クラス間の関係を連鎖的に引き継げる 開発速度の向上:ゼロから書かずに済むため、短期間で開発できる 保守性・拡張性:既存クラスを壊さずに機能を追加しやすい 継承の5つの種類 Pythonの継承は、その構造によって主に以下の5種類に分類されます。 単一継承(