Python

【Python初心者】クラスの継承の基本定義とコードの書き方を解説する。

こんにちは(@t_kun_kamakiri)(‘◇’)ゞ

この記事では、Pythonのクラスの継承について解説します。
主に「Pythonクラスの継承のコードの書き方」について解説しましたのでクラスの継承の初学者はコードを実際に走らせてみて学習を進めてください。

前回の記事で「クラスの基本定義」について解説しましたのでまだ見ていない方は是非どうぞ(^^)/

前回の記事はこちら

 

この記事はこんな人のために書きました。

この記事を読むと
  • クラスの継承って何?
  • オーバーライドの仕方がわからない!
  • 子クラスから親クラスのメソッドを呼び出す方法
  • 別ファイルのクラスは継承できないのかな?
クラスの継承についてとても基本的なことをまとめましたので参考にしてください。
使用環境を示しておかないと混乱しそうなのでちゃんと書いておきます(^^)/

【Pythonの使用環境について】
Anaconda
Google Colaboratory
当ブログはこれをメインに使った計算結果です。

関連記事
☟書籍も紹介しておきます。
こちらの本がPython初心者が挫折することなく勉強できる本です。
(本記事のようのPython使用環境と異なりますが、とてもわかりやすいので全く問題ありません)
スポンサーリンク

カマキリ

そもそも「クラスの継承」って何?

この記事を読む人はこんな気持ちでしょう(´;ω;`)

 

継承(Inheritance)は、既存のクラスの一部を使う・追加する機能です。
これを「再利用」といいます。
難しいことは置いといて・・・・クラスの継承を一言でまとめると・・・
クラスの継承

もともと作ってあるクラスに「追加や変更したい部分だけを定義した新しいクラスを作ること」です。

要するに、既存のクラスを使いまわすことを「クラスの継承」といいます!

この記事では以下の内容を実際にコードを書きながら解説します。

Pythonのクラスの継承を身につけよう
  1. 簡単なクラスの継承機能
  2. オーバーライドとは?
  3. 子クラスから親クラスのメソッドを呼び出す方法
  4. 別ファイルのクラスを継承する

 簡単なクラスの継承機能

 

Pythonのクラスの継承を身につけよう
  1. 簡単なクラスの継承機能
  2. オーバーライドとは?
  3. 子クラスから親クラスのメソッドを呼び出す方法
  4. 別ファイルのクラスを継承する

 

カマキリ

コードを書きながら学びましょう!

この記事ではPythonのクラスの継承のコードの書き方について記載しています。

実行結果

上のコードは以下のようになっています。

  • kamakiriという名前のクラスを定義(←親のクラス)
  • kamakiriCkassという子クラスがkamakiri(親クラス)を継承
  • kamakiri_pro = kamakiriClass()で子クラスをインスタンス化

kamakiri_pro = kamakiriClass()をインスタンス化した時点で、kamakiriClass(子クラス)の中の

が実行されて「カマキリです」と表示したというわけです。


 

kamakiriという名前のクラスには、さらに「run」「eat」「get_kamakiri」という関数があります。
関数「run」「eat」「get_kamakiri」を子クラスから呼び出してみましょう。

 

カマキリ

親クラスの関数を使うときはこう書く!

<インスタンス化した子クラス名>.<親クラスの中の関数()>

こう書くことでkamakiri_pro をインスタンス化した時点で親クラスの関数を使うことができます。

実際に書いてみましょう。

子クラスから親クラスの関数「run」を呼び出してみましょう。

実行結果

うまく親クラスの「run」を実行できたようです。

では、次に子クラスから親クラスの関数「get_kamakiri」を呼び出してみましょう。

実行結果

うまく親クラスの「get_kamakiri」を実行できたようです。

クラスの継承の基本的なコードの書き方はこんな感じですね。

オーバーライドとは?

次に、オーバーライドというのを説明します。
Pythonのクラスの継承を身につけよう
  1. 簡単なクラスの継承機能
  2. オーバーライドとは?
  3. 子クラスから親クラスのメソッドを呼び出す方法
  4. 別ファイルのクラスを継承する
オーバーライドと言われると難しいそうですが、いったんオーバーライドは忘れて以下の質問に答えてみましょう。
親のクラスにあるメソッドと同じメソッドを子クラスで定義するとどちらのメソッドが呼び出されるのでしょうか?
答えは、呼び出されるメソッドは子クラスのメソッドです。

 

子クラスのメソッドが優先して呼び出されると覚えておきましょう。
これをオーバーライド(override(上書き))と呼びます。
実際にコードを書いてみましょう。

実行結果

ここまでは、先ほどと同じです。
ここでは、あえて「親クラスの関数」と「子クラスの関数」を同じにしました。

本当に子クラスの関数が優先して呼び出されるのかを確認してみましょう。
では、eat()という関数を呼び出してみます。
実行してみます。

実行結果

確かに子クラスの関数が優先して呼び出されましたね。

このように元のクラスを継承して新たに関数を書き換えることできる・・・・というのがオーバーライド(上書き)でした!

子クラスから親クラスのメソッドを呼び出す方法

子クラスから親クラスのメソッドを呼び出してみましょう。

Pythonのクラスの継承を身につけよう
  1. 簡単なクラスの継承機能
  2. オーバーライドとは?
  3. 子クラスから親クラスのメソッドを呼び出す方法
  4. 別ファイルのクラスを継承する

 

その際に使うのがsuper()です。

では、実際にコードを書いてみましょう。

実行結果

ん?正直よくわからない・・・・(笑)

カマキリ

よくわからないので絵を用意しました。!

やっていることは、
まず「kamakiri_pro = kamakiriCalass(0,1)」とすることで引数「0,1」としながら、kamakiri_pro という名前でクラスのインスタンス化を行っています。

そうするとクラスのインスタンス化した時点で、「kamakiriCalassクラス」の中の初期化のメソッド「__init__」が実行されます。
「kamakiriCalassクラス」の中の初期化のメソッド「__init__」はsuper()によって親クラスのメソッドを呼び出しています。

そして最後に「print文」が2つ続いて、「<インスタンス化した子クラス名>.<子クラスの中の変数(superで親クラスの変数を呼び出した)>」とすることで、

実行結果が以下のようになりました。

 


 

ちまみに以下のように子クラスの中の関数を呼び出すとこうなります。

↓実行

実行結果

 

ここまででクラスの継承の基本的なコードの書き方は以上です。

以上なのですが、クラスの定義自体は中身のコードをさほど知らなくても使うことができるという利点があります。
だったら、クラスの中身だけ別ファイルにしておいて、メインのコードだけシンプルに書く方が良い場合が多いでしょう。

というわけで「クラスは別ファイルにしておいて・・・・別ファイルのクラスを継承する」というのを以下でやります。

別ファイルのクラスを継承する

Pythonのクラスの継承を身につけよう
  1. 簡単なクラスの継承機能
  2. オーバーライドとは?
  3. 子クラスから親クラスのメソッドを呼び出す方法
  4. 別ファイルのクラスを継承する

 

「test.py」というファイルの中身を以下のように書きます。

そして「main_test.py」というのを以下のように書きます(これがメインのファイルです)

ちょっとわかりにくいですが、「main_test.py」の冒頭で「test.py」を読み込んでいます。

そして、「kamakiriCalass(test.kamakiri)」のように、
「<ファイル名.クラス名>」
とすることで親クラスを指定して、クラスの継承を行っています。
実行
実行結果

まとめ

クラスの継承について解説をしました。

  • 継承って何?
  • オーバーライドとは?
  • 子クラスから親クラスのメソッドを呼び出す方法
  • 別ファイルのクラスを継承する

コードの開発においてはクラスの機能である「カプセル化、再利用可能」などを上手く使うことで自分だだけでなくコードの中身を全く知らない第三者にも使ってももらうことができるはずです。
そしてクラスの一部を使いまわししたいという場合にクラスの継承という機能はとても役に立ちます。

クラスの概念に慣れるのには時間を要しますが億劫がらずに使っていきたいところです(;^ω^)

↓以下がPython初学者のためのお勧めの参考書です。

関連記事もどうぞ

COMMENT

メールアドレスが公開されることはありません。 が付いている欄は必須項目です