この記事を読むことで、
・クラスの継承をゲゲゲの鬼太郎のキャラクターと一般人の例
・親クラスを一般人、子クラスを鬼太郎たち妖怪
・メソッドのオーバーライドのコード
・一般的なループと内包表記を使ったループの復習
の概要が掴めます。
親(スーパー)クラス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版
単行本(ソフトカバー)