PYTHON はじめの一歩 / LESSON 11

クラスは設計図。

データと動きをひとまとめにするクラス。設計図から実物を作るイメージで、インスタンスとメソッドを理解しよう。

学びを始める

ROBORONを何体も作ってみる。 | 動画なしでも学べます

クラスは設計図。をあおい・はる・AI先生・ROBORONと考えるイラスト
ROBORONを何体も作ってみる。
GOAL

この回でできるようになること

  • 01クラスとインスタンスの違いを言える
  • 02__init__ と self の役割を説明する
  • 03メソッドを呼び出して状態を変える
ことばの窓
01 / EXPLORE

設計図と、そこから作るもの

class は共通の設計図です。Robot() と書くと、その設計図から1体のインスタンスを作ります。

あおい

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

AI先生

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

はる

設計図は共通でも、それぞれの名前は独立していますね。

実際のコードまず結果を予想してみよう
class Robot:
    pass

first = Robot()
second = Robot()
print(first is second)
実行するとFalse

なぜ? first と second は同じ Robot クラスから作られても別のインスタンスです。pass は、まだ中身を書かないときの仮置きです。

目で見てわかる設計図と、そこから作るもの
図11-1 ひとつの設計図から別々の実物を作れます。
図11-1 ひとつの設計図から別々の実物を作れます。
ROBORONのチェック!

Python 3 では class Robot: と書けばよく、(object) は省略できます。

02 / EXPLORE

作るときに名前を決める

__init__ はインスタンスを作るときに呼ばれます。self.name は、そのインスタンスが持つ名前です。

あおい

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

AI先生

__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)
実行するとROBORON / KOROBON

なぜ? 2つのインスタンスが、それぞれ自分の name を持っています。

目で見てわかる作るときに名前を決める
図11-2 同じ設計図でも、それぞれの状態は別です。
図11-2 同じ設計図でも、それぞれの状態は別です。
ROBORONのチェック!

__init__ は初期化に使う特別な名前。前後のアンダースコアは2本ずつだよ。

03 / EXPLORE

自分のデータで動くメソッド

クラスの中に書いた関数をメソッドと呼びます。self を通して自分のデータを使えます。

あおい

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

AI先生

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())
実行するとぼくはROBORON!

なぜ? first.introduce() の self は first。first.name の値が文章に入ります。

目で見てわかる自分のデータで動くメソッド
図11-3 メソッドは自分の状態を使って働きます。
図11-3 メソッドは自分の状態を使って働きます。
ROBORONのチェック!

メソッド名は動きを表す言葉にすると、コードを読みやすくできるよ。

04 / YOUR TURN

予想して、理由まで確かめよう

答えを選んだら、説明を読んでから実行欄でも試してみよう。

チャレンジどれになるかな?

Robot('ROBORON') と Robot('KOROBON') は?

答えを選ぶと理由が表示されます。

PUT IT TOGETHER

小さな練習:ロボットの電池を持たせよう

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() がその値を使います。

COFFEE BREAK

現実のロボットを表すには

あおい

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

AI先生

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

はる

動作確認しやすい小さな設計から始めます。

05 / RUN PYTHON

自分の手で動かそう

例題を選び、結果を予想してから「実行する」を押そう。値を変えると、どの行が結果を決めるか見えてくるよ。

例題を選ぶ

書き換えて試せます。Tabキーは半角スペース4つ分です。

同じ設計図から作っても、別の実物です。

この入力欄の使い方

コード内の input() に渡す値を1行ずつ書きます。input() がない例では空欄で大丈夫です。複数回呼ぶコードでは上から順に使います。

準備できました。

実行結果

実行すると、ここに結果を表示します。

Pythonは閲覧中の端末内で動作します。

AI先生からひとこと

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