▶ クラスについて基本から学びたい方は以下の記事を参考にしてください。
はじめに
今回は「クラスの継承」について基本から解説します。継承は、他のクラスをベースとして(継承して)別のクラスを作る仕組みです。既存のクラスに機能追加したり、機能変更して新しいクラスを作ることができるので、一から作るよりも効率的な実装ができます。まずは用語の確認からはじめて継承の基本までを解説します。
クラスの継承
用語の確認
冒頭でクラスの継承を「他のクラスをベースとして(継承して)別のクラスを作る仕組み」と説明しました。このベースとするクラスのことをスーパークラスと呼びます。また、スーパークラスをもとに作られたクラスをサブクラスと呼びます。
スーパークラスは親クラス、基底クラス、サブクラスは子クラス、派生クラスと呼ばれることもありますが、同じ意味ととらえてください。
クラスの継承
クラスの継承をするときは、基本的な機能はベースのクラス(スーパークラス)に定義されているものをそのまま使います。継承をして作った新しいクラス(サブクラス)では必要な部分だけを書き換えたり、新たに追加する機能だけを書き加えることになります。
書式
クラスの継承の書式を確認しておきましょう。class文でベースとなるクラス(スーバークラス)を指定します。
これが基本書式になります。まずはこの書式に従って実際に継承でクラスを作ってみることにしましょう。
継承でクラスを作る
では実際に試してみましょう。まず一つクラスを定義して、これをベースのクラス(スーパークラス)として別のクラス(サブクラス)を作ってみることにしましょう。
# クラスAnimalの作成
class Animal:
def __init__(self, name):
self.name = name
print('Animal クラスのinitが呼び出されました')
def walk(self):
print(f'{self.name}が歩いています')
# AnimalをベースにしてクラスRakudaを作成
class Rakuda(Animal):
pass
まず2~8行目でAnimalクラスを定義しています。Animalにはnameというインスタンス変数とwalk()というメソッドを定義しました。
11~12行目でAnimalクラスをベースとしてRakudaクラスを定義しました。継承時の基本書式に従って作成しています。このRakudaクラス側では特に何も定義をしないことにして処理項目の部分はpassとしています。
この状態でRakudaクラスからインスタンスを生成してみましょう。
# インスタンスの生成
hitokobu=Rakuda('ひとこぶらくだ')
Rakudaクラスからインスタンスを作成すると、Animalクラスのinitが呼ばれているのがわかりますね。Rakudaクラスではインスタンス変数もメソッドも定義していなくても、スーパークラスのAnimalのinitが呼ばれています。Animalクラスのinitではnameというインスタンス変数が定義されているので、Rakudaクラスでインスタンスを作成するときにも、引数にnameの値の指定が必要となることに注意しましょう。
次にインスタンス変数とメソッドを確認しておきましょう。
# インスタンス変数の確認
hitokobu.name
# メソッドの確認
hitokobu.walk()
インスタン変数name, walkメソッドともに問題ないですね。このようにRakudaクラス内では何も定義していないのに、スーパークラスを継承して作っているので、スーパークラスで定義したインスタンス変数、メソッドが使えるわけです。便利ですね!
まとめ
今回は継承を使ったクラスの作成の基本を扱いました。今回はサブクラス側で何も定義しなくても、スーパークラスを継承することで、機能が引き継がれることを確認しました。
実際には、サブクラスがスーパークラスと全く同じ機能であるとなんの意味もないので、機能追加や機能変更を加えていくことになります。このやり方は次回の投稿で扱うことにします。
コメント