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

Pythonのクラス継承とは?基本構文からオーバーライド・super()まで徹底解説

クラスの継承とは

Pythonでは、クラスをゼロから定義しなくても、すでに存在するクラス(親クラス)をもとにして新しいクラス(子クラス)を作り出せます。この仕組みを「継承(inheritance)」と呼びます。書き方はシンプルで、新しいクラス名の後ろに括弧を付け、その中に親クラス名を記述するだけです。

子クラスは親クラスの属性やメソッドをすべて引き継ぎます。つまり、親クラスで定義された機能を、あたかも自分のクラス内で定義したかのように利用できるのです。さらに、子クラス側で親クラスのデータメンバやメソッドを上書き(オーバーライド)することも可能です。

基本構文

派生クラスの宣言方法は親クラスとほぼ同じですが、クラス名の後ろに継承元となる基底クラス(複数指定可)をリストとして記述します。

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

サンプルコード

以下は、親クラス Parent を継承して子クラス Child を作成する例です(Python 3系の記法)。

class Parent:            # 親クラスを定義
    parentAttr = 100

    def __init__(self):
        print("Calling parent constructor")

    def parentMethod(self):
        print('Calling parent method')

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

    def getAttr(self):
        print("Parent attribute :", Parent.parentAttr)


class Child(Parent):     # 子クラスを定義(Parentを継承)
    def __init__(self):
        print("Calling child constructor")

    def childMethod(self):
        print('Calling child method')


c = Child()              # 子クラスのインスタンスを生成
c.childMethod()          # 子クラス自身のメソッドを呼び出し
c.parentMethod()         # 親クラスのメソッドを呼び出し
c.setAttr(200)           # 親クラスのメソッドで属性を変更
c.getAttr()              # 変更後の属性値を表示

実行結果

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

Calling child constructor
Calling child method
Calling parent method
Parent attribute : 200

ポイント解説

  • コンストラクタの挙動: 子クラスで __init__ を定義すると、親クラスの __init__ は自動的には呼ばれません。「Calling child constructor」のみが出力されている点に注目してください。
  • メソッドの再利用: 子クラスのインスタンスからでも、c.parentMethod() のように親クラスのメソッドをそのまま呼び出せます。

super()で親クラスの処理を呼び出す

子クラスの __init__ 内で親クラスの初期化処理も実行したい場合は、組み込み関数 super() を使います。

class Child(Parent):
    def __init__(self):
        super().__init__()   # 親クラスの__init__を明示的に呼び出す
        print("Calling child constructor")

このように書くことで、共通の初期化処理を親クラスにまとめられ、コードの重複を防げます。

多重継承について

Pythonでは、括弧内にカンマ区切りで複数の親クラスを指定する「多重継承」もサポートされています。ただし、同名のメソッドが存在する場合の探索順序(MRO:メソッド解決順序)を理解しておかないと意図しない動作につながるため、必要以上に複雑な継承構造は避けるのがおすすめです。

  1. Pythonにおけるアンダースコア(_)の意味と使い方をわかりやすく解説

    Pythonでは、アンダースコア(_)は特別な役割を持つ記号です。一見ただの文字に見えますが、実際にはインタープリタの動作や命名規則、数値リテラルの表記など、さまざまな場面で重要な働きをします。この記事では、Pythonでアンダースコアが使われる主な5つのケースを、コード例とともにわかりやすく解説します。1. インタープリタで直前の式の値を保持するPythonの対話モード(インタープリタ)では、直前に評価した式の結果が、特別な変数「_」に自動的に格納されます。計算結果をすぐに再利用したいときに非常に便利です。使用例>>> 12 + 10 22 >>> _ 2

  2. Pythonでmkdir -pと同じようにディレクトリを再帰的に作成する方法

    mkdir -pとは?UnixやLinuxのコマンドであるmkdir -pは、親ディレクトリが存在しない場合でも、必要な階層のディレクトリをまとめて一括作成できる便利なオプションです。また、指定したディレクトリがすでに存在していてもエラーにならず、そのまま処理が続行されます。Pythonでmkdir -pと同等の処理を行うにはPythonで同じことを実現するには、標準ライブラリのosモジュールにあるos.makedirs()関数を使用します。この関数に作成したいパスを渡すことで、中間の親ディレクトリも含めて再帰的にディレクトリを作成できます。exists_ok=True を指定するデフォルトで