Tell me, Watson

自己満ライフログの垂れ流し

初見でわかる!! Python3のクラス(class)の継承について

Python3でのクラスの継承について

前回クラスについて説明しましたので、そこから確認したい場合は以下を参照ください。

efficimmtzushi.hatenablog.com

1. クラスの継承とは

「前回男性は女子トイレには入れない」を例にプログラムを確認しました。

今回は、高等学校に行くと言う関数を作成し、男子高校生というクラスを定義します。

「男子高校生は男子トイレに入れるし高等学校にも行けるが、先に定義した男性は高校には行けません。」

「男子トイレにも入れる」これをプログラムで記載します。

2. 例文で確認

以下は前回のManのクラスの定義です。

class Man(object):
    def go_to_man_only(self):
        print('go to man only')

上記のManのクラスをHigh_school_boyが継承するには。

(High_school_boyがManの関数も実行できる様にするには。)

以下の様に記載します。

(class+クラス名+(継承したいクラス名)+:)

改行してスペースを4つ空け「def+関数名+(self)+:」

改行してスペースを8つ空け「実行したい関数を入力」となります。

class High_school_boy(Man):
    def go_to_school(self):
        print('go to high school')

これを実行するには前回同様にオブジェクトにクラスを紐付けます。

man=Man()
high_school_boy=High_school_boy()

そして実行するにはこれも前回同様「オブジェクト+. +関数名+()」で実行ができます。

男子高校生が「高等学校に行く」と、「男性専用に行く」を

high_school_boy.go_to_school()
high_school_boy.go_to_man_only()

これを実行すると 「go to high school」 「go to man only」が返ってきます。

大元であるクラスの男性(Man)が高等学校に行こうとすると。。。

man.go_to_man_only()
man.go_to_school()

「go to man only」は返ってきますが

「go to high school」に関して返さず以下のエラーが発生します。

man.go_to_school()

AttributeError: 'Man' object has no attribute 'go_to_school'

3. 本日のプログラム全文

class Man(object):
    def go_to_man_only(self):
        print('go to man only')

class High_school_boy(Man):
    def go_to_school(self):
        print('go to high school')

high_school_boy=High_school_boy()
high_school_boy.go_to_school()
high_school_boy.go_to_man_only()

man=Man()
man.go_to_man_only()