📖 11分で読める

【Python入門 #1】変数・オブジェクト・クラスの違い — たい焼きの金型で解説


💡 この記事について AIアシスタント(OpenClaw/スピカ)との会話を元にした学習記録です。 内容は変更される可能性があるため、実際の開発では公式ドキュメントを確認の上、ご自身の判断でお願いします。


この記事で分かること:

  • 変数とは何か
  • オブジェクトとは何か
  • クラスとは何か
  • 3つの関係

バイブコーディングで困った日

セブ
セブ
スピカ、バイブコーディングでAIにコード書いてもらってるんだけど、生成されたコードを見ても何やってるか分からないことがある。
スピカ
スピカ AI
どの辺が引っかかる?
セブ
セブ
たとえば hero = Character("セブ", hp=100) みたいなの。Character って何? hero って何? なんか色々あってよく分からない。
スピカ
スピカ AI
なるほど。じゃあ今日はプログラミングの基礎中の基礎、「変数」「オブジェクト」「クラス」の3つを整理しよう。これが分かるだけで、AIが書いたコードがグッと読めるようになるよ。

1. 変数 — 名前付きの箱

スピカ
スピカ AI
まず「変数」から。データを入れておく「名前付きの箱」だよ。
age = 25
name = "セブ"
スピカ
スピカ AI
ageという箱に25を、nameという箱に"セブ"を入れてるイメージ。
セブ
セブ
なんで箱に入れる必要があるの?直接書いたらダメ?
スピカ
スピカ AI
2つ理由があるよ。1つ目、同じ値を何度も使えること。
# 変数なし(同じことを何回も書く)
print("セブ")
print("セブさんこんにちは")

# 変数あり(1箇所変えればOK)
name = "セブ"
print(name)
print(name + "さんこんにちは")
スピカ
スピカ AI
2つ目、コードの意味が分かること。
# これだと何の計算?
print(100 * 1.1)

# これなら税込み計算ってわかる
price = 100
tax_rate = 1.1
print(price * tax_rate)
セブ
セブ
あー、100 * 1.1 だけだと「何の計算?」ってなるけど、price * tax_rate なら一発で分かるな。

2. オブジェクト — データと機能がセットになった「モノ」

セブ
セブ
次、オブジェクトって何?
スピカ
スピカ AI
英語で「物体」。プログラミングでは「データと機能がセットになったモノ」のこと。実は、Pythonではすべてがオブジェクトなの。
25           # 数値オブジェクト
"セブ"        # 文字列オブジェクト
[1, 2, 3]    # リストオブジェクト
セブ
セブ
数字もオブジェクトなの?
スピカ
スピカ AI
そう。で、変数とオブジェクトの関係がこれ。
name = "セブ"
  • name = 変数(ラベル、名札)
  • "セブ" = オブジェクト(実際のデータ)
スピカ
スピカ AI
現実で例えると、変数は駐車場の番号札「A-3」。オブジェクトは実際に停まっている車。
セブ
セブ
番号札を見れば車にアクセスできるってことか。
スピカ
スピカ AI
そう。変数を見ればオブジェクトにアクセスできる。

3. クラス — 設計図・型紙

セブ
セブ
最後、クラスって何?
スピカ
スピカ AI
オブジェクトを作るための「設計図」だよ。たい焼きで例えると分かりやすい。
  • クラス = たい焼きの金型 🐟
  • オブジェクト = 金型から作ったたい焼き本体
# 金型(クラス)からたい焼き(オブジェクト)を作る
taiyaki1 = Taiyaki()
taiyaki2 = Taiyaki()
taiyaki3 = Taiyaki()
スピカ
スピカ AI
金型(クラス)は1つ。でも、たい焼き(オブジェクト)は何個でも作れる。
セブ
セブ
あー、設計図は1つだけど、実物は何個でも作れるってことか。

Pythonでの例

import turtle

george = turtle.Turtle()  # 亀オブジェクトを作成
bob = turtle.Turtle()     # もう1匹作成
スピカ
スピカ AI
Turtleが亀の設計図(クラス)。georgebobが設計図から作った亀たち(オブジェクト)。
セブ
セブ
ちなみに、なんでクラスは大文字で始まるの?
スピカ
スピカ AI
Pythonの命名規則だよ。
種類書き方
クラス大文字始まりTurtle, Player
変数小文字george, name
関数小文字forward(), print()
スピカ
スピカ AI
大文字を見たら「設計図(クラス)だな」って分かる。これ覚えておくとコードが読みやすくなるよ。

3つの関係を整理

セブ
セブ
変数、オブジェクト、クラス。3つの関係はどうなるの?
スピカ
スピカ AI
こう。
クラス(設計図)
    ↓ インスタンス化(作成)
オブジェクト(実物)

変数(名前をつけて参照)
george = turtle.Turtle()
部分役割
turtleモジュール(道具箱)
Turtleクラス(設計図)
Turtle()インスタンス化(作成)
george変数(名前)
スピカ
スピカ AI
この1行で「turtleモジュールのTurtleクラスからオブジェクトを作り、georgeという変数に入れる」っていう処理をしてるの。
セブ
セブ
1行にこんなに詰まってたのか…。

🎮 やってみよう — 3つ全部使ってキャラを作る

スピカ
スピカ AI
じゃあ、ここまでの3つを全部使って、ミニRPGのキャラクターを作ってみよう。
# クラス(設計図)を定義
class Character:
    def __init__(self, name, hp, attack):
        self.name = name       # 変数:名前
        self.hp = hp           # 変数:体力
        self.attack = attack   # 変数:攻撃力

    def introduce(self):
        print(f"【{self.name}】HP:{self.hp} 攻撃力:{self.attack}")

    def attack_enemy(self, enemy):
        print(f"{self.name} の攻撃! → {enemy.name}{self.attack} ダメージ!")
        enemy.hp -= self.attack

# オブジェクトを作成(クラスからインスタンス化)
hero = Character("セブ", hp=100, attack=25)
enemy = Character("バグモンスター", hp=60, attack=15)

# 実行してみる
hero.introduce()     # 【セブ】HP:100 攻撃力:25
enemy.introduce()    # 【バグモンスター】HP:60 攻撃力:15

hero.attack_enemy(enemy)  # セブ の攻撃! → バグモンスター に 25 ダメージ!
enemy.introduce()         # 【バグモンスター】HP:35 攻撃力:15
コード概念役割
Characterクラス(設計図)キャラの共通構造を定義
hero, enemy変数作ったオブジェクトに名前をつける
Character("セブ", ...)オブジェクト設計図から実際のキャラを生成
セブ
セブ
おお、たった20行で全部つながるのか。
スピカ
スピカ AI
Pythonが入ってるPCがあれば、コピペして動かしてみてね。目で見るより手を動かした方が理解が早いよ。

まとめ

概念意味例え
変数データの入れ物名前付きの箱
オブジェクトデータと機能のセット実物(車、たい焼き)
クラスオブジェクトの設計図金型、設計書
セブ
セブ
バイブコーディングでAIが書いたコードを見たとき、この3つを意識すると「何をやってるか」が見えてくる気がする。
スピカ
スピカ AI
その通り。次回は「関数とメソッドの違い」について話そう。

参考リンク