
この回でできるようになること
- 01クラスとインスタンスの違いを言える
- 02__init__ と self の役割を説明する
- 03メソッドを呼び出して状態を変える
設計図と、そこから作るもの
class は共通の設計図です。Robot() と書くと、その設計図から1体のインスタンスを作ります。

ROBORONの仲間を2体作りたい! 名前だけ違う子にできる?

できるよ。同じ設計図から、それぞれ別のインスタンスを作るんだ。

設計図は共通でも、それぞれの名前は独立していますね。
class Robot:
pass
first = Robot()
second = Robot()
print(first is second)
なぜ? first と second は同じ Robot クラスから作られても別のインスタンスです。pass は、まだ中身を書かないときの仮置きです。

Python 3 では class Robot: と書けばよく、(object) は省略できます。
作るときに名前を決める
__init__ はインスタンスを作るときに呼ばれます。self.name は、そのインスタンスが持つ名前です。

片方をROBORON、もう片方をKOROBONにしよう!

__init__ の引数で名前を受け取って、self.name に保存すればいいんだよ。

self は『今扱っているこのインスタンス』を表すのですね。
class Robot:
def __init__(self, name):
self.name = name
first = Robot("ROBORON")
second = Robot("KOROBON")
print(first.name)
print(second.name)
なぜ? 2つのインスタンスが、それぞれ自分の name を持っています。

__init__ は初期化に使う特別な名前。前後のアンダースコアは2本ずつだよ。
自分のデータで動くメソッド
クラスの中に書いた関数をメソッドと呼びます。self を通して自分のデータを使えます。

ROBORONに自己紹介してほしいな。

introduce というメソッドを作ろう。呼び出したロボットが自分の名前を話すよ。

first.introduce() と呼ぶと、first の self.name を使うのですね。
class Robot:
def __init__(self, name):
self.name = name
def introduce(self):
return f"ぼくは{self.name}!"
first = Robot("ROBORON")
print(first.introduce())
なぜ? first.introduce() の self は first。first.name の値が文章に入ります。

メソッド名は動きを表す言葉にすると、コードを読みやすくできるよ。
予想して、理由まで確かめよう
答えを選んだら、説明を読んでから実行欄でも試してみよう。
Robot('ROBORON') と Robot('KOROBON') は?
答えを選ぶと理由が表示されます。

小さな練習:ロボットの電池を持たせよう
Robot に battery を持たせ、show() メソッドで残量を表示しよう。
ヒント:__init__ で self.battery に保存します。
解き方の一例と理由を見る
class Robot:
def __init__(self, battery):
self.battery = battery
def show(self):
return f"残量 {self.battery}%"
robot = Robot(80)
print(robot.show())80はインスタンスの battery に入り、show() がその値を使います。
現実のロボットを表すには

電池残量や位置もロボットごとに持てそう!

そうなんだよ。けれどクラスを作る前に『そのデータと動きは本当にひと組か』を考えるといいね。

動作確認しやすい小さな設計から始めます。
自分の手で動かそう
例題を選び、結果を予想してから「実行する」を押そう。値を変えると、どの行が結果を決めるか見えてくるよ。
書き換えて試せます。Tabキーは半角スペース4つ分です。
同じ設計図から作っても、別の実物です。
この入力欄の使い方
コード内の input() に渡す値を1行ずつ書きます。input() がない例では空欄で大丈夫です。複数回呼ぶコードでは上から順に使います。
準備できました。
実行結果
実行すると、ここに結果を表示します。
Pythonは閲覧中の端末内で動作します。

ROBORONを何体も作ってみる。 今日覚えた道具を、別の値でも試してみよう。自分で理由を説明できたら、とてもいい進歩なんだよ。