
ゆうき( @BASEBALLY15 )です^^
前回に,クラス(class)の使い方を学習しました.
クラスの『継承』について勉強しているのですが,あまりイメージが出来ないです・・・
なかなかイメージするのは難しいですよね・・・
そこで,今回は,学校の教室に例えて,クラスの『継承』についてまとめてみました^^

目次
クラス(class)を教室で例えてみた-継承編-

クラス(class)の『継承』について学習する時に,
学校の教室をイメージすると理解しやすいのではないかと思います.
例えば,上の図のようにAクラスの中で仲良しグループにまとめます.
このグループの分け方をBクラスでも使いたい時に,『継承』を使います.
それでは,コードを見ていきましょう⤵
コード
今回は,以下の流れで,継承についてまとめます.
- Aクラスを作る
- Aクラスを表示する
- Bクラスを作る(継承)
- Bクラスを表示する(継承)
Aクラスを作ってみよう!

まずは,Aクラスを用意します.
コンストラクタを用意して,
インスタンス変数を用意します.
そして,仲良しグループに分けるために,関数を用意します.
(※詳細については,過去の記事に投稿しています.)
class Aclass:
#コンストラクタを作成
def __init__(self, name1, name2,name3,name4,name5):
#インスタンス変数を定義
self.name1 = name1
self.name2 = name2
self.name3 = name3
self.name4 = name4
self.name5 = name5
#仲良し1関数を作成
def nakayosi_1(self):
print(self.name1 + "と" + self.name2 + "と" + self.name3 + "は仲良しです^^")
#仲良し2関数を作成
def nakayosi_2(self):
print(self.name4 + "と" + self.name5 + "は仲良しです^^")
Aクラスを表示してみよう!
まずは,インスタンスを用意します.
これを用意することで,クラスを形にすることとが出来ます.
#インスタンスを作成
friend_a = Aclass("前田", "吉田", "大田", "佐藤", "大村")
そして,以下のコードを書いて,表示させることが出来ます.
#表示
friend_a.nakayosi_1()
friend_a.nakayosi_2()
実行結果 前田と吉田と大田は仲良しです^^ 佐藤と大村は仲良しです^^
Bクラスを用意しよう!(継承)
次に,Bクラスを用意して,Aクラスのグループ分けを継承します.
『継承』を使えば,Aclassで作った関数(メソッド)を作る必要がありません.
また,コンストラクタに関しては,
super().__init__()
と書くことで,AclassのコンストラクタをBclassで使うことが出来ます.
それでは,コードを見てみましょう⤵
class Bclass(Aclass):
#コンストラクタを作成
def __init__(self, name1, name2,name3,name4,name5):
#super().__init__で親クラス(Aclass)のコンストラクタを使う
super().__init__(name1, name2,name3,name4,name5)
ちなみに,このように,カッコの中にAclassと書くことで,
『Aclassから継承している』ということを表しています.

Bクラスを表示しよう!(継承)
それでは,継承したBクラスを表示してみます.
#インスタンスを作成
friend_a = Aclass("前田", "吉田", "大田", "佐藤", "大村")
#表示
friend_b.nakayosi_1()
friend_b.nakayosi_2()
実行結果 田中と前川と大西は仲良しです^^ 轟と沢村は仲良しです^^
このように,『継承』を使うと短いコードで完結するので,いいですね^^
おまけ-プライベートメソッド-
ちなみに,クラス内にある関数をクラス外から呼び出せないようにするためには,以下のように書きます.
class Bclass(Aclass):
def nakayosi_1(self):
print(self.name1 + "と" + self.name2 + "と" + self.name3 + "は仲良しです^^")
self.__nakayosi_2()
def __nakayosi_2(self):
print(self.name4 + "と" + self.name5 + "は仲良しです^^")
nakayosi_2関数の前にアンダーバー(_)を2つ書きます.
そして,nakayosi_1関数内で,『self.__nakayosi_2()』と書くことで,
クラス内からしか呼び出せないように出来ます.
これを実行してみると,このようになります.
#インスタンスを作成
friend_a = Aclass("前田", "吉田", "大田", "佐藤", "大村")
#実行
friend_a.nakayosi_1()
実行結果 前田と吉田と大田は仲良しです^^ 佐藤と大村は仲良しです^^
ここで,クラス外からnakayosi_2関数を呼び出してみると,どのような結果になるのでしょうか?
結果を見てみましょう⤵
#実行
friend_a.__nakayosi_2()
実行結果 --------------------------------------------------------------------------- AttributeError Traceback (most recent call last) <ipython-input-15-80c418f8eec1> in <module> ----> 1 friend_a.nakayosi_2() AttributeError: 'Aclass' object has no attribute '__nakayosi_2'
このように,クラス外からは呼び出せなくなりました.
外部から呼び出したくないときに,この方法が使えます.
終わりに
今回は,クラス(class)の『継承』についてまとめました.
実際のものに例えて考えると,結構分かりやすいです.
ぜひ,プログラミングの勉強で詰まったら,何かに例えて考えてみてください^^
それでは・・・