クラス

INPUT · スライド

データと処理が散らばる

01 / 07

辞書で「会員」を表す

第2章で辞書を覚えたとき、こう思ったかもしれない。「人やお店を表すなら、これで足りるじゃないか」と。

実際、しばらくは足りる。会員ひとりぶんの情報は、辞書ならこう書けるね。

kaiin = {"namae": "あおい", "nensuu": 3}print(kaiin["namae"])print(kaiin["nensuu"])

実行結果

あおい
3

02 / 07

そのデータを使う処理を書く

データができたら、次はそれを使う処理だね。まずは名前を整えて表示する処理を、第3章でやった関数にまとめてみよう。

辞書を丸ごと受け取って、中から必要なものを取り出す形にしたよ。

def hyouji(kaiin):    namae = kaiin["namae"]    return f"{namae}さん"kaiin = {"namae": "あおい", "nensuu": 3}print(hyouji(kaiin))

実行結果

あおいさん

03 / 07

処理はどんどん増える

会員でやりたいことは表示だけじゃない。年会費を計算したい。退会できるかも判定したい。

そのたびに、辞書を受け取る関数が1つずつ増えていくよ。

def nenkaihi(kaiin):    if kaiin["nensuu"] >= 3:        return 4000    return 5000kaiin = {"namae": "あおい", "nensuu": 3}print(nenkaihi(kaiin))

実行結果

4000

04 / 07

データと処理がバラバラの場所にある

関数が3つになった。そのどれもが「会員の辞書は namae と nensuu を持つ」ということを知っている必要がある。

でも辞書そのものは、関数とはまったく別の場所に置かれているよね。「会員とは何か」がファイルのあちこちに散らばっているんだ。

def hyouji(kaiin):    namae = kaiin["namae"]    nensuu = kaiin["nensuu"]    return f"{namae}さん(会員{nensuu}年目)"def nenkaihi(kaiin):    if kaiin["nensuu"] >= 3:        return 4000    return 5000def taikai_dekiru(kaiin):    return kaiin["nensuu"] >= 1kaiin = {"namae": "あおい", "nensuu": 3}print(hyouji(kaiin))print(nenkaihi(kaiin))print(taikai_dekiru(kaiin))

実行結果

あおいさん(会員3年目)
4000
True

05 / 07

キーの名前を1つ変えるだけで

"nensuu" という名前を "nen" に変えたくなったとしよう。直すのは辞書の1か所……ではない。

kaiin["nensuu"] と書いてある関数を全部さがして回ることになる。1つでも見落とすと、そこだけが KeyError で落ちるよ。

kaiin = {"namae": "あおい", "nen": 3}print(kaiin["nensuu"])

実行結果

KeyError: 'nensuu'

06 / 07

会員が増えても、散らばりは直らない

リストに会員をたくさん入れれば、まとめて処理できる。それはいい。

でも「会員とはこういうものだ」と書いてある場所は、やっぱりどこにも無い。辞書の形は、書いた人の記憶の中にしかないんだ。だから項目を入れ忘れた辞書も、平気で作れてしまう。

def hyouji(kaiin):    namae = kaiin["namae"]    nensuu = kaiin["nensuu"]    return f"{namae}さん(会員{nensuu}年目)"kaiins = [    {"namae": "あおい", "nensuu": 3},    {"namae": "ひなた", "nensuu": 1},]for kaiin in kaiins:    print(hyouji(kaiin))

実行結果

あおいさん(会員3年目)
ひなたさん(会員1年目)

07 / 07

次はこれを1つの箱にまとめる

散らばったものを集める仕組みが、この章で学ぶクラスだよ。

「会員とはこういうデータを持ち、こういうことができるものだ」と一か所に書いておく。そうすれば、形を変えたいときに見る場所は1つで済む。

このレッスンではまだ class を書かない。いまの不便さを手で味わっておくのが目的だよ。次のレッスンから、これを解決していこう。