継承と拡張について

10.1 継承と拡張について

これまでの章では、「コンピュータ」の機能をまとめた「Computerクラス」を利用して、プログラムを何度も作成してきました。この章ではさらに、既存の「Computerクラス」から新しいクラスを作成する方法を学習していきます。

10.1.1 クラスの継承とは

既存のクラスをもとに新しい別のクラスを作成し、既存のクラスの機能を受け継がせることを継承(inheritance)といいます。このとき、もとになる既存のクラスはスーパークラス(親クラス)、新しいクラスはサブクラス(子クラス)と呼ばれます。
例えば「ノートパソコン」を作成したいとします。ノートパソコンはコンピュータの一種なので、「コンピュータ」と「ノートパソコン」には多くの共通点がみえてきます。そのような場合、Pythonでは既存の「Computerクラス」の機能を、ノートパソコンを表す「NotePcクラス」に継承させることができます。
この継承の関係を例に当てはめると以下の関係になります。

  • 「Computer(コンピュータ)」クラス → スーパークラス(親クラス)
  • 「NotePc(ノートパソコン)」クラス → サブクラス(子クラス)

図 10.1.1:クラスの親子関係

継承の主な特徴

1)サブクラスはスーパークラスのインスタンス変数、インスタンスメソッド、クラス変数、クラスメソッドを受け継ぐ。
2)サブクラス内でスーパークラスのメソッドの呼び出しには super() を使う。
3)Pythonではスーパークラスのコンストラクタが継承される。
4)Pythonでは一度に複数のクラスを継承できる。

図 10.1.2: クラスの継承イメージ

10.1.2 継承が用いられる理由

既存のクラスと共通する機能を持った新しいクラスを複数作成する場合、各クラスに共通する機能を全てのクラスで定義するよりも、共通する機能の部分をスーパークラスとして作り、各クラス固有の機能をもったサブクラスで継承し、スーパークラスの機能を再利用する方が、プログラム効率が高まります。このように、スーパークラスの機能を利用できるようにするための仕組みとして継承が用いられます。
例えば前項で例にあげた「ノートパソコン」を作成したい場合、新しく「NotePcクラス」を作成する際、既存の「Computerクラス」の機能が被っている場合、新しく作り直すよりも、「Computerクラス」を受け継ぐよう指定します。その結果、「Computerクラスの機能を継承したNotePcクラス」が作られます。

図 10.1.3: クラスの継承のイメージ②

上記の図が示すように、ノートパソコンクラスはコンピュータクラスを受け継ぎます。このため、コンピュータクラスにある機能(変数やメソッド)は作成する必要がありません。ノートパソコン独自の機能(変数やメソッド)だけ作成すればよいことになるのです。

ポイント

  • 新しいクラスに既存のクラスの機能を利用できるようにする仕組みのことを、機能を受け継ぐことから「継承」と呼ぶ。

NEXT>> 10.2 クラスを継承する方法