クリーム色の背景、色付き表示、高コントラスト、大きな文字のほうが読みやすいですか?配色と文字を選ぶと、すべてのページに一度で反映されます。

無料レッスン

クラスとオブジェクトとは

このレッスンのあとで: 身の回りのものを、状態と振る舞いを持つクラスとして設計することができる。

55分のレッスンコマンド6件毎日使う Linux コマンドのラボ:エンジニアが暗記している30のコマンド

クラスとオブジェクトとは

クラスとは、データとそれを扱う関数を1つにまとめた、オブジェクトの設計図です。オブジェクトは、その設計図から作った1つ1つの実物です。

プログラムが大きくなると、関連するデータと関数がばらばらになります。クラスにまとめれば、1つの部品として何度でも使えます。

このレッスンのゴール

メモ

身の回りのものを、状態と振る舞いを持つクラスとして設計することができる。

キーワード

ことばいみれい
クラス同じ種類のものの設計図Pen
オブジェクトクラスから作った実物。インスタンスとも呼ぶPen("黒", 120)
属性オブジェクトが覚えているデータ。状態とも呼ぶself.price_yen
メソッドクラスの中に書いた関数。振る舞いを表すlabel()
selfそのメソッドを呼んだオブジェクト自身
__init__オブジェクトを作るとき、最初に動くメソッド

学生が入力するセルは、このプレビューでは空白です。

クラスは状態と振る舞いの設計図

ペンには、色や値段のように、覚えておくデータがあります。これを状態と呼び、プログラムでは属性に入れます。

ペンには、説明を返すような動きもあります。これを振る舞いと呼び、メソッドとして書きます。

クラスは、この2つをまとめて書く場所です。

ペンのクラスを書いて動かす

コード: python
class Pen:
    # 新しいペンを作るとき、最初に1回だけ動きます。
    def __init__(self, colour, price_yen):
        self.colour = colour
        self.price_yen = price_yen

    # ペンの説明の文を返す、振る舞いです。
    def label(self):
        return self.colour + "のペン " + str(self.price_yen) + "円"


pen = Pen("黒", 120)
print(pen.label())
# 色を "赤" に、値段を 150 に変えて、もう一度実行しましょう。

同じクラスから作ったオブジェクトは別物

クラスを呼ぶと、オブジェクトが1つできます。Pen("黒", 120) を2回書けば、ペンが2本できます。

2本は同じ設計図から作っても、別のものです。片方の属性を変えても、もう片方は変わりません。

2つのカウンターは別々に数える

コード: python
class Counter:
    def __init__(self):
        self.count = 0

    def add(self):
        self.count = self.count + 1


first = Counter()
second = Counter()
first.add()
first.add()
second.add()
print(first.count, second.count)
# second.add() をもう1行足すと、どうなるでしょう。

例: 2本のペンの状態

オブジェクトnameprice_yenwith_tax() の答え
aPen120132
b、値段を直す前Marker200220
b、値段を300に直した後Marker300330

学生が入力するセルは、このプレビューでは空白です。

ラボで自分のクラスを動かす

ラボの端末で、ペンのクラスを書いて動かします。3つの Run を、上から順に押してください。

ファイルの文字は英語だけにしてあります。端末の文字コードに、頼らないためです。

作業用のフォルダを作る

コマンド
mkdir -p ~/oop/classes

ここでは表示のみで、実行されません。無料アカウントを作成すると、実行ボタンで自分のラボのターミナルに入力できます。

そのフォルダへ移る

コマンド
cd ~/oop/classes

ここでは表示のみで、実行されません。無料アカウントを作成すると、実行ボタンで自分のラボのターミナルに入力できます。

クラスを書いたファイルを作る

コマンド
printf 'class Pen:\n    def __init__(self, name, price_yen):\n        self.name = name\n        self.price_yen = price_yen\n\n    def with_tax(self):\n        return self.price_yen * 110 // 100\n\n\na = Pen("Pen", 120)\nb = Pen("Marker", 200)\nprint(a.name, a.with_tax())\nprint(b.name, b.with_tax())\nb.price_yen = 300\nprint(a.price_yen, b.price_yen)\n' > shop.py

ここでは表示のみで、実行されません。無料アカウントを作成すると、実行ボタンで自分のラボのターミナルに入力できます。

ファイルを動かす

コマンド
python3 shop.py

ここでは表示のみで、実行されません。無料アカウントを作成すると、実行ボタンで自分のラボのターミナルに入力できます。

出力を読んで、別物だと確かめる

出力は3行です。Pen 132 と Marker 220 は、2本の with_tax の答えです。

最後の 120 300 は、b の値段だけを300に直した結果です。a の値段は120のままで、2本が別物だと分かります。

b の値段を500に書き換える

コマンド
sed -i 's/b.price_yen = 300/b.price_yen = 500/' shop.py

ここでは表示のみで、実行されません。無料アカウントを作成すると、実行ボタンで自分のラボのターミナルに入力できます。

最後の1行だけを見る

コマンド
python3 shop.py | tail -n 1

ここでは表示のみで、実行されません。無料アカウントを作成すると、実行ボタンで自分のラボのターミナルに入力できます。

よくある間違い

注意

「class を書いた時点で、オブジェクトが1つできている」と考える人が多くいます。class は設計図を書くだけです。オブジェクトは、Pen("黒", 120) のようにクラスを呼んだときに、初めてできます。

このラボとソースについて: 毎日使う Linux コマンドのラボ:エンジニアが暗記している30のコマンド

授業で使いますか?このモジュールを学生に割り当てると、教員用ガイド、自動採点つきの課題、学生ごとのラボを使えます。