この記事を読むことで、
・昭和ギャグを通してPythonのクラスの初歩的なコードが書けるようになる
・ロスジェネ世代や中高年のプログラミング学習に馴染みのある例を用いている
・改行の仕方の復習
・内包表記を使ったループの復習
プログラミング初心者で、子どもの頃にTV で「志村けん」さんのギャグを見て笑っていた昭和の方々を対象にしていますが、若い方でも志村けんさんをご存知の方は大勢いらっしゃると思いますので、年齢に関係なくクラスの学習が必要な方はお立ち寄り下さいませ♪
クラス=設計図
インスタンス=クラスという設計図から作られた「具体的な」製品
と説明をすると、なんだか小難しい感じがするので、
クラス… 志村けんさんの「ウンジャラゲ」を例にして、【何】曜日は【ナニナニナニ♪】といったフォーマット
インスタンス… そのフォーマットから作った、
「【月】曜日は【ウンジャラゲ】」、
「【火】曜日は【ハンジャラゲ】」・・・「【日】曜日は【ランラランらランランっ!】 と言った「具体的な」各曜日ごとの踊り
と捉えると少し分かりやすくなるかもしれないです。
下記の動画は、今回学ぶ「Pythonのクラスの例」として使っているので、お忙しい方も出来れば「最初の1分程度まで(日曜日まで)」を先に見ておいて頂けると、楽しみながらPythonのクラスの理解が深まると思います。
(動画右下の歯車マークから再生スピードを2倍速にすると、余計に笑えるかも知れませんヨ!)
では、いよいよプログラムを詳しく見ていきます。
ウォーミングアップとして、最初に志村けんさんのセリフとBGMを出力するコードです。
シンプルなprint文3行です。
#志村けんさんのコールと「ウンジャラゲのBGM」
print('-------------------------------------------')
print('志村けんさん:「さぁ、みんな揃って【ぶわぁぁぁぁぁぁぁっと】参りましょうか!!」')
print('♪・・・BGM・・・\n')
ポイントと言っても、4行目のprint文で改行の「バックスラッシュn」を使っている所ぐらいでしょうか。「バックスラッシュ」はMacをお使いの方は【option】+【¥】で表示されます。Windowsの方はこちらをご参照ください。
では、ここからが本題で、クラスJarageを作って行きます。
まずは、インスタンス化する時に自動的に最初に呼ばれるコンストラクタの部分のコードから書いてきます。
コンストラクタは簡単に書くと、初期化するメソッド(関数)です。
初期化 → 月曜日 → 初期化 → 火曜日 → 初期化 → 水曜日・・・
という具合に呼び出されるので、必ず初期化が必要です。
#クラスJarage
class Jarage:
#コンストラクタで初期化している
def __init__(self, week, spell):
self.week = week
self.spell = spell
selfというのは、呼ばれた月曜日、火曜日・・・の各曜日自体のことです。
weekに曜日を、spellに「ウンジャラゲ」、「ハンジャラゲ」といった歌詞を引数にしています。
クラスで使うメソッド(関数)には「self」が必要です!!
次は、「何曜日」が「ナンジャラゲ」になるのか出力するSongメソッドです。
クラスの中で使う関数をメソッドと呼びます。
#何曜日は何ジャラゲかを出力するSongメソッド
def Song(self):
print(self.week+'曜日は、「'+self.spell+'」')
一旦ここまでのクラスJarageのコードをまとめます。
#クラスJarage
class Jarage:
#コンストラクタで初期化している
def __init__(self, week, spell):
self.week = week
self.spell = spell
#何曜日は何ジャラゲかを出力するSongメソッド
def Song(self):
print(self.week+'曜日は「'+self.spell+'」')
クラスの中にあるSongメソッドを使うのに、
mon=Jarage('月','ウンジャラゲ')
とすると、【月】曜日は【ウンジャラゲ】、と入るようにします。
変数【self.week】に「月(曜日)」、変数【self.spell】に「ウンジャラゲ(歌詞)」が入り、これをリストを使って、各曜日用意します。
次に、月曜日から日曜日までインスタンス化する処理です。この後、各曜日を格納するリストeverydayを、各曜日の英語略で作ります。
#曜日とその歌詞のインスタンスを生成
mon=Jarage('月','ウンジャラゲ♪')
tue=Jarage('火','ハンジャラゲ♪')
wed=Jarage('水','スイスイスイ♪')
thu=Jarage('木','モーリモリ♪')
fri=Jarage('金','キンキラキン♪')
sta=Jarage('土','ギンギラギンのギンギラギンのギンギラギンのギン♪')
sun=Jarage('日','ランラランらランランっ!')
リストはこちらです。
#曜日のリスト
everyday=[mon,tue,wed,thu,fri,sta,sun]
このリストeverydayをループを使って順々にインスタンス化していくコードです。
#ループを使って各曜日のインスタンス化を行う
for day in everyday:
day.Song()
このループの部分を内包表記で書くと、ループのコードが1行にシンプルに記述出来ました。
#内包表記で各曜日のインスタンス化のループを作成
[day.Song() for day in everyday]
内包表記の公式
[結果 for いつものFor文 ]
では、クラスJarageの中のSongメソッドをループで呼び出して各曜日ごとに表示します。
これまでのコードに出力文「だいじょぶだぁ」などを加えたコードと、実行結果です。
#志村けんさんのコールと「ウンジャラゲのBGM」
print('\n -------------------------------------------')
print(' 志村けんさん:「さぁ、みんな揃って【ぶわぁぁぁぁぁぁぁっと】参りましょうか!!」')
print(' ♪・・・BGM・・・\n')
#クラスJarage
class Jarage:
#コンストラクタで初期化している
def __init__(self, week, spell):
self.week = week
self.spell = spell
#何曜日は何ジャラゲかを出力するSongメソッド
def Song(self):
print(' '+self.week+'曜日は「'+self.spell+'」')
#曜日とその歌詞のインスタンスを生成
mon=Jarage('月','ウンジャラゲ♪')
tue=Jarage('火','ハンジャラゲ♪')
wed=Jarage('水','スイスイスイ♪')
thu=Jarage('木','モーリモリ♪')
fri=Jarage('金','キンキラキン♪')
sta=Jarage('土','ギンギラギンのギンギラギンのギンギラギンのギン♪')
sun=Jarage('日','ランラランらランランっ!')
#曜日のリスト
everyday=[mon,tue,wed,thu,fri,sta,sun]
#内包表記で各曜日のインスタンス化のループを作成
[day.Song() for day in everyday]
print('\n 志村けんさん:「だいじょぶだぁ!!」')
print(' -------------------------------------------\n')
最後に練習として、「【猫】曜日は【うんにゃにゃんにゃんにゃん(=^x^=)っm】」を加えます。
これはリストeverydayに「cat」を追加して、「猫(【猫】曜日の猫)」、「【うんにゃにゃんにゃんにゃん(=^x^=)っm】」と引数を2つ指定したオブジェクトを作れば良いだけなので、簡単に改造できそうですね。
追加したコードです。
#猫曜日を追加
cat=Jarage('猫','んにゃにゃにゃにゃんにゃん(=^x^=)mm!')
#曜日リストの末尾に「cat」を追加
everyday=[mon,tue,wed,thu,fri,sta,sun,cat]
追加の実行結果です。
はい、これで無事に「猫曜日」が追加されました!!
・・・いったい自分は何をしているんだろう…。という気にもなりましたが、昭和のギャグも令和でのプログラミングの勉強に繋がっていたってことで。
それではこの追加のコードを含めて、ここまでの全コードを掲載します。
#志村けんさんのコールと「ウンジャラゲのBGM」
print('\n -------------------------------------------')
print(' 志村けんさん:「さぁ、みんな揃って【ぶわぁぁぁぁぁぁぁっと】参りましょうか!!」')
print(' ♪・・・BGM・・・\n')
#クラスJarage
class Jarage:
#コンストラクタで初期化している
def __init__(self, week, spell):
self.week = week
self.spell = spell
#何曜日は何ジャラゲかを出力するSongメソッド
def Song(self):
print(' '+self.week+'曜日は「'+self.spell+'」')
#曜日とその歌詞のインスタンスを生成
mon=Jarage('月','ウンジャラゲ♪')
tue=Jarage('火','ハンジャラゲ♪')
wed=Jarage('水','スイスイスイ♪')
thu=Jarage('木','モーリモリ♪')
fri=Jarage('金','キンキラキン♪')
sta=Jarage('土','ギンギラギンのギンギラギンのギンギラギンのギン♪')
sun=Jarage('日','ランラランらランランっ!')
#猫曜日を追加
cat=Jarage('猫','んにゃにゃにゃにゃんにゃん(=^x^=)mm!')
#曜日リストの末尾に「cat」を追加
everyday=[mon,tue,wed,thu,fri,sta,sun,cat]
#内包表記で各曜日のインスタンス化のループを作る
[day.Song() for day in everyday]
print('\n 志村けんさん:「だいじょぶだぁ!!」')
print(' -------------------------------------------\n')
今回教材に使った曲は、「植木等 ハナ肇とクレイジー・キャッツの曲」だそうです。
お疲れ様でした。ブレイクタイムPhotoは、
しながわ花海道のコスモスです。
ご精読ありがとうございました。
■ 独習Python ■
Kindle版
単行本(ソフトカバー)