01 / 07
クラス
INPUT · スライド
生まれる瞬間に中身を決める
02 / 07
__init__ を書く
クラスの中に def __init__(self): と書くと、実物が生まれる瞬間に一度だけこの中が動くよ。
呼び出す行はどこにも書かない。Kaiin() と書いた瞬間に、Python が勝手に走らせてくれるのがポイントだよ。
class Kaiin: def __init__(self): print("かいいんができた")kaiin = Kaiin()print("おわり")実行結果
かいいんができた おわり
03 / 07
アンダースコア2本のしるし
__init__ の前とうしろにあるのは、アンダースコアが2本ずつ。_init_ ではないので気をつけてね。
アンダースコア2本で囲まれた名前は、Python が特別あつかいするしるしだよ。「自分で呼ぶ名前ではなく、決まったときに Python が呼んでくれる名前」という目印だと思っておこう。
04 / 07
self に値を持たせる
__init__ の最初の引数 self(セルフ)は、いままさに作られている、その実物自身を指すよ。
だから self.namae = "あおい" と書けば、その実物に属性を持たせられる。できあがった時点でもう中身がそろっているんだ。
class Kaiin: def __init__(self): self.namae = "あおい" self.nensuu = 3kaiin = Kaiin()print(kaiin.namae)print(kaiin.nensuu)実行結果
あおい 3
05 / 07
作るときに値を渡す
これだと何人作っても同じ中身になってしまう。個体ごとに違う値にするには、__init__ に引数を足そう。
渡すのは Kaiin("あおい", 3) のように、クラス名のうしろの () の中。第3章でやった引数とまったく同じ仕組みだよ。self は自分では渡さない。
class Kaiin: def __init__(self, namae, nensuu): self.namae = namae self.nensuu = nensuua = Kaiin("あおい", 3)b = Kaiin("ひなた", 1)print(a.namae)print(b.namae)実行結果
あおい ひなた
06 / 07
左と右で同じ名前でもいい
self.namae = namae は左右で名前が同じで、ちょっと不思議に見えるよね。でも意味はきっぱり分かれているよ。
- 左の
self.namae… これから作る実物が持つ属性 - 右の
namae… いま受け取った引数
「受け取った値を、その実物の持ちものに写す」と読めばいいよ。
07 / 07
外から読める・書ける
self. をつけて入れた属性は、外から kaiin.namae でふつうに読めるし、あとから書きかえることもできる。
引数の初期値もそのまま使えるよ。書かなかったときの値を決めておけるので、「たいていは1年目」のような既定を設計図に持たせられるんだ。
次のレッスンでは、この箱に「できること」を入れていこう。
class Kaiin: def __init__(self, namae, nensuu=1): self.namae = namae self.nensuu = nensuukaiin = Kaiin("みなと")print(kaiin.nensuu)kaiin.nensuu += 1print(kaiin.nensuu)実行結果
1 2