CHAPTER 5 · 8 lessons · 101問

クラス

データとふるまいをひとまとめにして、自分だけの「種類」を作る。設計の考え方が変わる章。

0 / 101 問クリア

第2章で辞書を覚えたとき、こう思ったかもしれない。「人やお店を表すなら、これで足りるじゃないか」と。実際、しばらくは足りる。困りはじめるのは、そのデータを使う処理が増えてきたときだよ。

たとえば「会員」を辞書で表したとする。会員の名前を整えて表示する処理、年会費を計算する処理、退会できるか判定する処理——それぞれ別の関数として書いていくと、データと処理がバラバラの場所に散らばる。会員のデータの形を少し変えたいだけなのに、関係する関数を全部探して回ることになる。

クラスは、そのデータと処理を1つの箱にまとめる仕組みだよ。「会員とはこういうデータを持ち、こういうことができるものだ」と一度書いておけば、あとはその設計図から実物をいくつでも作れる。設計図が クラス、そこから作った実物が インスタンス だ。

Python では class Kaiin: と書いて設計図を作る。中で最初に書くのが __init__ という特別な関数で、これは実物が生まれる瞬間に一度だけ呼ばれる。ここで「この会員の名前は何か」といった、個体ごとの値を決める。アンダースコア2本で囲まれた名前は Python が特別扱いするしるしだよ。

そして self。この章で作るインスタンスメソッドには、最初の引数として慣習的に self と書く。これは「いま扱っている、その実物自身」を指す。同じ設計図から作った会員が100人いても、self.namae と書けばその人の名前になる。最初は呪文に見えるけれど、「誰の話をしているか」を明示しているだけだよ。

章の後半は 継承。「ほとんど同じだけど、少しだけ違う」ものを作るときの書き方だ。会員クラスをもとに「プレミアム会員クラス」を作れば、共通の部分は書き直さずに、違うところだけ書けばいい。もとの処理を上書きするのがオーバーライド、上書きしつつもとの処理も呼ぶのが super() だよ。

クラスは、覚えることが多いわりに「ありがたみ」が実感しにくい章でもある。小さなプログラムなら関数だけでも書けてしまうからだ。でも、あなたが将来使うライブラリのほとんどはクラスでできている。書けるようになる前に、まず読めるようになる。それだけでも十分な収穫だよ。

この章のレッスン

設計図から作る

  1. 60データと処理が散らばるまだ class は書かない。辞書と関数だけで会員を扱って、不便なところを先に味わおう。問題へ
  2. 61設計図を書いて実物を作るclass で「こういうものを作る」と宣言しよう。そこから作った実物がインスタンスだよ。問題へ
  3. 62生まれる瞬間に中身を決める__init__ は実物が生まれるときに一度だけ呼ばれる特別な関数。ここで個体ごとの値を決めよう。問題へ
  4. 63設計図に「できること」を書くクラスの中に書いた関数がメソッド。self を最初に書くと、その実物自身のことが書けるよ。問題へ
  5. 64そのまま print できるようにする__str__ を定義すると、print(kaiin) が読める文字になる。返すのは必ず文字列だよ。問題へ

受けつぐ

  1. 65もとのクラスを受けつぐほとんど同じだけど少しだけ違うクラスは、class PremiumKaiin(Kaiin): と書いて作れるよ。問題へ
  2. 66上書きして、親も呼ぶもとの処理を書き直すのがオーバーライド。上書きしつつもとの処理も呼ぶのが super() だよ。問題へ
  3. 67いつクラスにするか第5章の総合演習。新しい文法は出てこない。使い分けを考えながら、練習10問だけを解いていくよ。問題へ

つぎは「モジュールと標準ライブラリ」。コードを複数のファイルに分け、Python に最初からついてくる道具を使う。1人で全部書かなくてよくなる章。