01 / 07
クラス
INPUT · スライド
設計図に「できること」を書く
02 / 07
メソッドの書きかた
__init__ と同じように、クラスの中に字下げして def を書く。最初の引数は必ず selfだよ。
呼ぶときは kaiin.aisatsu() のように、インスタンスにドットをつけて呼ぶ。self は自分では書かない。Python が「誰が呼んだか」を自動で入れてくれるからね。
class Kaiin: def __init__(self, namae): self.namae = namae def aisatsu(self): print(f"こんにちは、{self.namae}さん")kaiin = Kaiin("あおい")kaiin.aisatsu()実行結果
こんにちは、あおいさん
03 / 07
self は「その実物自身」
同じ設計図から作った会員が100人いても、self.namae と書けばいま呼ばれた、その人の名前になるよ。
最初は呪文に見えるけれど、self は「誰の話をしているか」を書いているだけなんだ。a.aisatsu() なら self は a、b.aisatsu() なら self は b だよ。
class Kaiin: def __init__(self, namae): self.namae = namae def aisatsu(self): print(f"こんにちは、{self.namae}さん")a = Kaiin("あおい")b = Kaiin("ひなた")a.aisatsu()b.aisatsu()実行結果
こんにちは、あおいさん こんにちは、ひなたさん
04 / 07
self を書き忘れると
def aisatsu(): と self を書かずに定義して、kaiin.aisatsu() と呼ぶとエラーになるよ。
呼んだ側は何も渡していないのに「1個渡された」と言われる。これが呼ばれた実物が自動で渡っているなによりの証拠だね。
class Kaiin: def aisatsu(): print("こんにちは")kaiin = Kaiin()kaiin.aisatsu()実行結果
TypeError: Kaiin.aisatsu() takes 0 positional arguments but 1 was given
05 / 07
メソッドも値を返せる
print するだけでなく、return で値を返すメソッドも書ける。第3章でやった関数とまったく同じだよ。
表示は呼んだ側にまかせるほうが、あとで使い回しやすいんだったね。
class Kaiin: def __init__(self, nensuu): self.nensuu = nensuu def nenkaihi(self): if self.nensuu >= 3: return 4000 return 5000kaiin = Kaiin(3)print(kaiin.nenkaihi())実行結果
4000
06 / 07
メソッドは引数も取れる
self のうしろに、ふつうの引数を並べられるよ。呼ぶときは self のぶんを飛ばして、2つ目から渡すんだ。
メソッドの中で self.pointo を書きかえれば、その実物の状態が変わる。「ポイントをためる」のような処理が素直に書けるね。
class Kaiin: def __init__(self, pointo): self.pointo = pointo def tameru(self, kazu): self.pointo += kazukaiin = Kaiin(10)kaiin.tameru(5)print(kaiin.pointo)実行結果
15
07 / 07
データと処理が1つになった
最初のレッスンで散らばっていた「表示する」「年会費を計算する」が、いまは Kaiin の中にそろっている。
項目の名前を変えたくなったら、見る場所はこのクラスの中だけ。これがクラスのいちばんのごほうびだよ。
次のレッスンでは、print(kaiin) と丸ごと渡したときの見え方を決めよう。
class Kaiin: def __init__(self, namae, nensuu): self.namae = namae self.nensuu = nensuu def hyouji(self): return f"{self.namae}さん(会員{self.nensuu}年目)" def nenkaihi(self): if self.nensuu >= 3: return 4000 return 5000kaiin = Kaiin("あおい", 3)print(kaiin.hyouji())print(kaiin.nenkaihi())実行結果
あおいさん(会員3年目) 4000