6.3 継承
コーディングをしていると、既存のクラスを少しだけ変更して新しいオブジェクトを作りたい場面によく遭遇します。 その際、元のクラスをコピー&ペーストして新しいクラスを作ってしまうと、コードが重複してメンテナンスが大変になります。
このような問題を解決する、コード再利用のための素晴らしい仕組みが 「継承」 です。
継承の基本用語
Section titled “継承の基本用語”継承を使うと、既存のクラスの機能をそのまま引き継ぎつつ、追加・変更したい部分だけを新しいクラスに定義することができます。
- 親クラス(スーパークラス、基底クラス): 元になる既存のクラスのこと。
- 子クラス(サブクラス、派生クラス): 親クラスを継承して新しく作るクラスのこと。
子クラスは、親クラスをより「専門特化」させたものです。オブジェクト指向の用語では、これを「である(is-a)関係」と呼びます(例:「Yugo(子)はCar(親)である」)。
継承を使ったクラスの定義方法
Section titled “継承を使ったクラスの定義方法”子クラスを定義するには、class キーワードを使い、クラス名の後のかっこ () の中に親クラスの名前を記述します。
まずは、親となる Car(車)クラスと、それを継承した子となる Yugo(ユーゴという車種)クラスを定義してみましょう。
# 親クラスの定義class Car(): def exclaim(self): print("I'm a Car!")
# 子クラスの定義(Carクラスを継承)class Yugo(Car): passこの時点では、Yugo クラスには pass しか書かれておらず、独自のメソッドは何も定義されていません。
継承したメソッドの呼び出し
Section titled “継承したメソッドの呼び出し”それでは、それぞれのクラスからオブジェクトを作成し、動作を確認してみましょう。
# オブジェクトの作成give_me_a_car = Car()give_me_a_yugo = Yugo()
# 親クラスのメソッド呼び出しgive_me_a_car.exclaim()# 出力: I'm a Car!
# 子クラスのメソッド呼び出しgive_me_a_yugo.exclaim()# 出力: I'm a Car!Yugo クラスには exclaim() メソッドを書いていませんが、親である Car クラスから自動的に継承しているため、エラーにならずに実行できていることがわかります。