理系母の趣味はプログラミング

理系院卒、メーカー技術職の二児の母が、PythonやVBAで色々と作ってアップしていくブログです。

【22日目】オブジェクト指向プログラミング⑥継承させる

こんばんは、なぺです。
今日はオブジェクト指向プログラミングの4大要素のうちの4つ目、継承です。

さて、継承とは
ja.wikipedia.org

主にクラスベースのオブジェクト指向言語で、既存クラスの機能、構造を共有する新たなクラス(派生クラス、派生型)を定義すること(subclassing、サブクラス化)ができる。またそのような派生クラスは「親クラス(スーパークラス)を継承した」という。具体的には変数定義(フィールド)や操作(メソッド)などが引き継がれる。

ふむふむ。
クラスを作るときにほかのクラスから変数やメソッドを引きつぐことができるのか。
親から髪質とか目の色とか肌の色を引きつぐのと同様ですね。
継承元のクラスを親クラス、継承先を子クラスというみたいです。

本のコードをもとに、子クラスに変数とメソッドを継承させてみます。

class Parent:
    def __init__(self,o):
        self.old = o

    def print_old(self):
        print('私は{}歳です'.format(self.old))

class Child(Parent):
    pass

hanako = Child(7)
hanako.print_old()
#実行結果
私は7歳です

Parentクラスの変数とメソッドを、Childクラスに継承しました。
Childクラスは継承するだけなので、passと書くことで何もしないことをPython先輩に伝えています。
Childクラスには何も定義していないのに、継承によってself.oldのインスタンス変数と、print_oldというメソッドを使うことができました。

ちなみに、メソッドは受け取るだけはなく、子のほうで上書きもできます。
子クラスが親クラスのメソッドを上書きすることを、メソッドオーバーライドといいます。
やってみます。

class Parent:
    def __init__(self,o):
        self.old = o

    def print_old(self):
        print('私は{}歳です'.format(self.old))

class Child(Parent):
    def print_old(self): #ここで上書き
        print('私の年齢は{}歳でーっす!Yeah!!'.format(self.old)) #文を少し変更

mama = Parent(40)
mama.print_old()
hanako = Child(7)
hanako.print_old()
#出力結果
私は40歳です
私の年齢は7歳でーっす!Yeah!!

できた!けどこれでいいのか?
結局コード書いてるから継承とか関係なくなりそうだけども。

今日はここまで!
最近寝不足気味でつらいです。

参考書はこちらです
「独学プログラマー

それではまた^^