この記事は、Pythonでクラスの継承と、メソッドのオーバーライドを学習中の方で、HiHiJetの井上瑞稀さん又は、美 少年の浮所飛貴さんを知っている(聞いたことがある〜大ファン)か、ジャニーズさんが好きな方を対象としています。
また、ループの【内包表記】についても触れています。
親(スーパー)クラスPeopleを継承して、小クラスJohnnysを作ります。
どちらにもactionというメソッドがあり、親クラスの方のactionでは、「通勤電車に乗った」という動きを、小クラスJohnnysのactionでは「バク宙をした」という動きにします。
ループも使うので、一般的なループの書き方と【内包表記】を使ったループの書き方も掲載します。
この動画では、美 少年の浮所さんの華麗なバク宙が見られます。
浮所さんが好きな方には、目の保養になるかもしれません。
Python自作サンプル集へ
これからプログラミングを学ぶ方へ
プログラミングと資格へ
基本情報技術者試験トップへ
自己紹介
さて、浮所さんが動画の冒頭で「井上瑞稀さんもバク宙していた」と言っていたので、Pythonでこのようなプログラムを作りました。
「親クラスPeople」では「山田太郎」さん、「鈴木花子」さん、「田中一郎さん」という名前を引数にして、それぞれ「yamada,suzuki,tanaka」というオブジェクトを作成しています。
また、「子クラスJohnnys」では「井上瑞稀」さん、「浮所飛貴」さんという名前を引数にして、それぞれ「inoue,ukisho」というオブジェクトを作成しています。
親クラスのコンストラクタでは、「selfとname」を引数にしています。actionメソッドでは「self.nameさんは通勤電車に乗った。」という動きをプリント文で作ります。
#親クラス「People」でコンストラクタと一般人の動きを掲載
class People:
def __init__(self,name):
self.name=name
def action(self):
print('【'+self.name+'】さんは「通勤電車」に乗った。')
小クラスでは、「self.nameさんはバク宙をした!!」という動きをプリント文で作ります。
#子クラス「Johnnys」でジャニーズバク宙の動きを掲載
class Johnnys(People):
def action(self):
print('【'+self.name+'】さんは「バク宙」をした!!')
このように、同じ名前のメソッドを、小クラスでは親クラスとは別の動きにすることを、メソッドのオーバーライドと言います。
また、子クラスのJohnnysでは、コンストラクタはありませんが、自動的に親クラスのコンストラクタが呼ばれます。
山田太郎さん、鈴木花子さん、田中一郎さん、井上瑞稀さん、浮所飛貴さんのオブジェクトを生成するコードです。
#一般人とジャニーズのオブジェクトを作成
yamada=People('山田太郎')
suzuki=People('鈴木花子')
tanaka=People('田中一郎')
inoue=Johnnys('井上瑞稀')
ukisho=Johnnys('浮所飛貴')
上記のオブジェクトをarrayという配列に入れます。
#オブジェクトを配列に格納
array=[yamada,suzuki,tanaka,inoue,ukisho]
この配列をループで取り出して、メソッドactionを呼ぶことによって、下記の実行結果を得られます。
ループのコードと、実行結果です。
#ループで各オブジェクとを動かしてみる
for man in array:
man.action()
また、上記のループを内包表記で書いた場合のコードです。
#上記ループの内包表記
[man.action() for man in array]
このように、内包表記では1行で書き現すことが出来ました。
ここまでのコードを全て掲載します。
#親クラス「People」でコンストラクタと一般人の動きを掲載
class People:
def __init__(self,name):
self.name=name
def action(self):
print('【'+self.name+'】さんは「通勤電車」に乗った。')
#子クラス「Johnnys」でジャニーズバク宙の動きを掲載
class Johnnys(People):
def action(self):
print('【'+self.name+'】さんは「バク宙」をした!!')
#一般人とジャニーズのオブジェクトを生成
yamada=People('山田太郎')
suzuki=People('鈴木花子')
tanaka=People('田中一郎')
inoue=Johnnys('井上瑞稀')
ukisho=Johnnys('浮所飛貴')
#オブジェクトを配列に格納
array=[yamada,suzuki,tanaka,inoue,ukisho]
#ループで各オブジェクとを動かしてみる
for man in array:
man.action()
#上記ループの内包表記
[man.action() for man in array]
(通常のループか、内包表記のどちらかをコメントアウトしないと、2回出力されてしまいます。)
最後までお読み頂きありがとにゃん(=^x^=)
■ 参考文献の紹介 ■
じっくり丁寧にPythonを学びたい方向けの書籍を紹介します。
Pythonを基礎から中級程度まで丁寧に学びたい方におすすめの書籍です。
まずはpaizaラーニングなどの学習コンテンツで1〜2巡(苦手な所は納得がいくまで何巡でも)してからこの本で学ぶと、自分の学習状況をブログなどでアウトプット出来るようになり、また、エラーなどの不明点を調べられる力もついていきます。