Raspberry Pi & Python 開発ブログ ☆彡

Raspberry PiとPythonの基本的な使い方をわかりやすく解説。初心者、入門者必見!!

継承とは

f:id:raspberrypi:20220406160352j:plain

ブログ管理者のP.Hです!

今回はオブジェクト指向の継承について解説しようと思います。 継承を使うことで、同じコードを複数個所に書くというプログラミングで一番やってはいけないことを 防ぐことができます。また、既存クラスのコード修正を比較的簡単に行えるという利点があります。 それでは解説してきます。

継承とは

継承することで出来ることは主に以下の2つです。

  1. 既存クラスの機能を全て引継いで、新たに機能を追加したクラスを作る
  2. 既存クラスの機能の関数のコードを上書きして、機能を変更する(オーバーライド)

もちろん、1と2を両方同時に使うこともできます。

新たに機能を追加したクラスを作る

下記が継承の書き方の例になります。MyClassBはMyClassAを継承して、name変数に"-san"を付け加える新しい関数を追加しています。 継承すると、継承したクラス(MyClassA)の関数は全て使うことができ、もう一度同じコードを書く必要がなくなります。

class MyClassA:

    def __init__(self):# コンストラクタ はじめに1回だけ実行される。変数の初期化に主に使われる 
        self.name = "" # nameという変数に初期値""を設定する

    def set(self, name): # 引数の値をnameという変数にセットする関数 
        self.name = name

    def get(self): # name変数の値を表示する関数
        print(self.name)


class MyClassB(MyClassA): # MyClassAを継承 継承したいクラス名を引数として記載する
             # MyClassAの変数、関数は全て使用することができる

    def _init_(self): # コンストラクタ
        MyClassA._init_(self) # MyClassAのコンストラクタを実行  

    def add_san(self): # nameに”-san”という文字を付与する関数を新たに追加    
        self.name = self.name + "-san"    


a = MyClassB() # クラスをインスタンス化(メモリに展開する)
a.set("tanaka") # "tanaka"という値をセットする
a.add_san() # "tanaka"に"-san"を付ける
a.get() # "tanaka-san"という値が表示される

コードを上書きして、機能を変更する(オーバーライド)

次は継承した関数を上書きする場合(オーバーライド)の例になります。

class MyClassA:

    def __init__(self):# コンストラクタ はじめに1回だけ実行される。変数の初期化に主に使われる 
        self.name = "" # nameという変数に初期値""を設定する

    def set(self, name): # 引数の値をnameという変数にセットする関数 
        self.name = name

    def get(self): # name変数の値を表示する関数
        print(self.name)

class MyClassB(MyClassA): # MyClassAを継承 継承したいクラス名を引数として記載する
             # MyClassAの変数、関数は全て使用することができる

    def _init_(self): # コンストラクタ
        MyClassA._init_(self) # MyClassAのコンストラクタを実行    

    def get(self): # MyClassAのget関数を上書きする(オーバーライド)
        print(self.name + "-san") # ”-san”という文字を付与して、表示する関数に変更 


a = MyClassB() # クラスをインスタンス化(メモリに展開する)
a.set("tanaka") # "tanaka"という値をセットする
a.get() # "tanaka-san"という値が表示される

get関数のコードを上書きして、置き換えることができます(オーバーライド)。 機能修正時やWebにアップロードされているクラスを自分の使いやすいように一部変更する時に役立ちます。

まとめ

継承の機能を使うことにより、以下の利点があります。

  1. 既存クラスのコードをそのまま使い、関数の追加もしくは関数の機能変更ができる。
  2. 既存クラスをそのまま使うことができるため、同じコードを複数個所に書くことを防ぐことができる。
  3. クラスの修正時、他人が作ったクラスの機能を一部修正する際に役に立つ。

継承はJavaやC#等の見ると、アクセス制御やコンストラクタの実行順等、難しい話が出てきますが、 はじめは頭の片隅に入れておくくらいでいいと思います。この辺りをはじめから完璧に覚えるより、 基本的な部分をまずはしっかり押さえましょう。

解説は以上になります。