【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が亀の設計図(クラス)。georgeとbobが設計図から作った亀たち(オブジェクト)。 セブ
ちなみに、なんでクラスは大文字で始まるの?
スピカ 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
その通り。次回は「関数とメソッドの違い」について話そう。