【Pythonクラスの継承とメソッドのオーバーライド】ゲゲゲの鬼太郎キャラの例

この記事を読むことで、

・クラスの継承をゲゲゲの鬼太郎のキャラクターと一般人の例

・親クラスを一般人、子クラスを鬼太郎たち妖怪

・メソッドのオーバーライドのコード

・一般的なループと内包表記を使ったループの復習

の概要が掴めます。

親(スーパー)クラスPeopleを継承して、小クラスGegegeを作ります。
どちらにもactionというメソッドがあり、親クラスPeopleの方のactionでは、「通勤電車に乗った」という動きを、小クラスGegegeのactionでは「妖術を使った」という動きにしました。

ループも使うので、一般的なループの書き方と【内包表記】を使ったループの書き方も掲載します。

「親クラスPeople」に登場する一般人は、「ヤマダ」さん、「サトウ」さん、「ヒガ」さん、「シマブクロ」さんです。
各々の一般人を引数にして、それぞれ「yamada,satou,higa,shimabukuro」というオブジェクトを作成しています。

また、「子クラスGegege」では「鬼太郎」、「ネコ娘」、「砂かけばばあ」、「ぬりかべ」のキャラを引数にして、それぞれ「kitarou,nekomusume,sunakakebabaa,nurikabe」というオブジェクトを作成しています。

親クラス「People」のコンストラクタでは、「selfとname」を引数にしています。actionメソッドでは「self.nameさんは電車に乗った。」という動きをprint文で作ります。

class People:
    def __init__(self,name):
        self.name=name

    def action(self):
        print('  【'+self.name+'さん】は「電車」に乗った。')

小クラス「Gegege」では、「self.nameさんは妖術を使って戦った!!」という動きを作ります。

#子クラス「Gegege」で鬼太郎たちが戦う動きを掲載
class Gegege(People):
    def action(self):
        print('【'+self.name+'】は【妖術】を使って戦った!!')

このように、同じ名前のメソッドを、小クラスでは親クラスとは別の動きにすることを、メソッドのオーバーライドと言います。

また、子クラスのGegegeでは、コンストラクタはありませんが、自動的に親クラスのコンストラクタが呼ばれます。

一般人と鬼太郎たちのオブジェクトを生成するコードです。

#一般人と鬼太郎たち妖怪のオブジェクトを作成
yamada=People('ヤマダ')
satou=People('サトウ')
higa=People('ヒガ')
shimabukuro=People('シマブクロ')
kitarou=Gegege('鬼太郎')
nekomusume=Gegege('ネコ娘')
sunakakebabaa=Gegege('砂かけばばあ')
nurikabe=Gegege('ぬりかべ')

上記のオブジェクトをarrayという配列に入れます。

#オブジェクトを配列に格納
array=[yamada,satou,higa,shimabukuro,kitarou,nekomusume,sunakakebabaa,nurikabe]

この配列をループで取り出して、メソッドactionを呼ぶことによって、下記の実行結果を得られます。
ループのコードと、実行結果です。

#ループで各オブジェクとを動かしてみる
for man in array:
    man.action()

また、上記のループを内包表記で書いた場合のコードです。

#上記ループの内包表記
[man.action() for man in array]    

このように、内包表記では1行で書き現すことが出来ました。

ここまでのコードを全て掲載します。

#親クラス「People」にはコンストラクタと一般人の動きをactionメソッド
class People:
    def __init__(self,name):
        self.name=name

    def action(self):
        print('【'+self.name+'さん】は「電車」に乗った。')


#子クラス「Gegege」で鬼太郎たちが戦う動きを掲載
class Gegege(People):
    def action(self):
        print('【'+self.name+'】は【妖術】を使って戦った!!')


#一般人と鬼太郎たち妖怪のオブジェクトを作成
yamada=People('ヤマダ')
satou=People('サトウ')
higa=People('ヒガ')
shimabukuro=People('シマブクロ')
kitarou=Gegege('鬼太郎')
nekomusume=Gegege('ネコ娘')
sunakakebabaa=Gegege('砂かけばばあ')
nurikabe=Gegege('ぬりかべ')


#オブジェクトを配列に格納
array=[yamada,satou,higa,shimabukuro,kitarou,nekomusume,sunakakebabaa,nurikabe]


#内包表記でループを1行に
[man.action() for man in array]

お疲れ様でした。ブレイクタイムPhotoは、

通勤通学で使う方もいらっしゃる、東京モノレールです。
羽田空港第二ターミナルまで行きます。

ご精読ありがとうございました。

■ 独習Python ■
Kindle版
単行本(ソフトカバー)

Python自作サンプル集へ戻る

写真クリエイターとしての活動
自己紹介

投稿者アバター
nekosiestr
プログラミング学習中のロスジェネ(就職氷河期世代)の発達障害者です。 宜しくお願いします。 趣味で写真を撮っています。 プログラミングは、GAS/HTML/CSS/JavaScript/jQuery/PHP、 発達障害は、自閉症スペクトラムASD/ADHD、その他双極性障害やHSP(5人に1人の繊細さん)などの生きづらさを抱えておりますが、それでも楽しく生きて行きたいです!! 写真は、以前はコンパクトデジカメ、現在は、OLYMPUSミラーレス一眼を使っています。

投稿者: nekosiestr

プログラミング学習中のロスジェネ(就職氷河期世代)の発達障害者です。 宜しくお願いします。 趣味で写真を撮っています。 プログラミングは、GAS/HTML/CSS/JavaScript/jQuery/PHP、 発達障害は、自閉症スペクトラムASD/ADHD、その他双極性障害やHSP(5人に1人の繊細さん)などの生きづらさを抱えておりますが、それでも楽しく生きて行きたいです!! 写真は、以前はコンパクトデジカメ、現在は、OLYMPUSミラーレス一眼を使っています。