プログラミングを勉強し始めると、必ず出てくる「クラス(Class)」という考え方。
しかし、初めての人にとっては 「クラスって何?」「関数や変数と何が違うの?」 とつまづきやすいポイントです。
この記事では、プログラミングをこれから始める人でも理解しやすいように 「クラス」 をやさしく解説します。
例え話や表を多く使いながら、じっくり理解してもらえるように構成しました。
目次
1. まず「クラス」を一言で言うと?
- クラスとは「設計図」です。
- その設計図をもとに作られる実物を オブジェクト(インスタンス) といいます。
例え話
- クラス → 車の「設計図」
- オブジェクト → 設計図から作られた「本物の車」
つまり、クラスは「形を決めるもの」、オブジェクトは「実際に動くもの」なんです。
2. クラスが必要な理由
では、なぜクラスなんて難しそうなものを使うのでしょう?
理由はシンプルです。
理由 | わかりやすい説明 |
---|---|
同じようなものを何度も作るから | 例えば「車」を何台も作りたいとき、毎回ゼロから書くのは大変。設計図(クラス)があれば楽。 |
プログラムを整理できるから | バラバラに変数や関数を書くより、1つのまとまりにした方がわかりやすい。 |
ミスを減らせるから | クラスを作れば「使い方」が決まるので、書き間違いが減る。 |
3. 変数・関数との違いを整理しよう
初心者がよく混乱するのが「変数」「関数」「クラス」の違いです。表にするとこうなります。
用語 | 役割 | 例え話 |
---|---|---|
変数 | 値を入れる箱 | お弁当箱(ご飯やおかずを入れる) |
関数 | 処理のまとまり | 料理を作るレシピ |
クラス | 設計図(変数+関数のセット) | レストランの「メニュー表」や「厨房の仕組み」 |
4. クラスの基本的な形(Pythonを例に)
初心者に人気のPythonでクラスを書くと、こんな感じになります。
class Car:
def __init__(self, color, brand):
self.color = color
self.brand = brand
def drive(self):
print(f"{self.color}の{self.brand}が走っています!")
# クラスからオブジェクトを作る
my_car = Car("赤", "トヨタ")
my_car.drive()
実行すると、
赤のトヨタが走っています!
と表示されます。
5. 「クラス」と「オブジェクト」の関係
ここをしっかり理解することが大切です。
用語 | 具体例 | プログラミングでの意味 |
---|---|---|
クラス | 「車の設計図」 | どういう変数・関数を持つかを定義する |
オブジェクト(インスタンス) | 実際に作られた車 | クラスをもとに作られた実体 |
6. ゲームで例えてみると
例えば「スマホアプリ」を作るとしましょう。
- クラス → 「ゲームキャラの設計図」
- オブジェクト → 「プレイヤーが使うキャラ1人1人」
ゲーム例
class Player:
def __init__(self, name, hp):
self.name = name
self.hp = hp
def attack(self):
print(f"{self.name}が攻撃した!")
p1 = Player("勇者", 100)
p2 = Player("魔法使い", 80)
p1.attack()
p2.attack()
出力:
勇者が攻撃した!
魔法使いが攻撃した!
7. クラスを使うメリットまとめ
メリット | 説明 |
---|---|
再利用できる | 一度作ったクラスをコピーして使える |
プログラムがきれいになる | 変数と関数をひとまとめにできる |
わかりやすい | 設計図があるので「何を作ったか」見やすい |
大規模開発に強い | ゲームやアプリなど大きなプログラムでも整理できる |
8. 初心者がつまずきやすいポイント
つまずきポイント | わかりやすい説明 |
---|---|
self がわからない | 「そのオブジェクト自身」を指す。 自分のことを「私」と呼ぶのと同じ。 |
__init__ がむずかしい | 「最初に実行される部分」。 家を建てるときの「工事開始」みたいなもの。 |
クラスと関数の違い | 関数は「処理だけ」 クラスは「データ+処理のセット」。 |
9.クラスでよく使う単語一覧(初心者向け)
単語 | 読み方 | 意味 | わかりやすい例え |
---|---|---|---|
class | クラス | クラスを作るための宣言 | 「ここから設計図を描きます」と宣言する |
__init__ | イニット(初期化メソッド) | クラスからオブジェクトを作ったときに最初に呼ばれる特別な関数 | 家を建てるときの「工事開始」 |
self | セルフ | そのクラスから作られた自分自身(オブジェクト)を指す | 自分のことを「私」と呼ぶようなもの |
def | デフ | 関数(メソッド)を作るときのキーワード | 「この処理をまとめます」と宣言する |
method | メソッド | クラスの中にある関数 | 車の「走る」「止まる」などの動作 |
attribute | アトリビュート(属性) | クラスに属する変数 | 車の「色」「メーカー」などの情報 |
object | オブジェクト | クラスから作られた実体 | 設計図から作られた本物の車 |
instance | インスタンス | オブジェクトとほぼ同じ意味 | プレイヤーキャラ1人1人(ゲームの例) |
inheritance | インヘリタンス(継承) | あるクラスをもとに、新しいクラスを作ること | 「親の設計図を引き継いで新しい設計図を作る」 |
super() | スーパー | 親クラスの処理を呼び出すときに使う | 「お父さんの設計図のこの部分も使うよ」と言うイメージ |
extra.クラス、モジュール、パッケージ、ライブラリの住み分け
まず全体のイメージ
- ライブラリ:本棚(道具がたくさん入ったまとまり)
- パッケージ:本棚の中の引き出し(整理された小分け)
- モジュール:引き出しの中の1冊の本(1ファイルのコード)
- クラス:本の中の章(オブジェクトの設計図)
用語 | たとえ | 中身 |
---|---|---|
ライブラリ | 大きな本棚 | 多数のパッケージを含む(外部からインストールすることも多い) |
パッケージ | 引き出し | 関連するモジュールをまとめて整理したもの |
モジュール | 1冊の本 | Pythonファイル(.py)単位のまとまり |
クラス | 本の中の章 | データや機能をまとめる設計図 |
相関図(イメージ図)
📚 ライブラリ(例:NumPy, Pandas)
│
├─ 📦 パッケージ(例:pandas.io)
│ │
│ ├─ 📄 モジュール(例:excel.py, sql.py)
│ │ │
│ │ └─ 🏷 クラス(例:ExcelWriter, SQLDatabase)
│ │
│ └─ 📄 モジュール(例:json.py)
│ └─ 🏷 クラス(例:JsonReader)
│
└─ 📦 パッケージ(例:pandas.core)
└─ 📄 モジュール(例:frame.py)
└─ 🏷 クラス(例:DataFrame)
10. 他の言語のクラスも少しだけ
Python以外の言語でもクラスはあります。
言語 | クラスの特徴 |
---|---|
Java | クラスがないとプログラムが始まらないほど重要 |
C++ | 高速な処理ができるが文法は少し複雑 |
JavaScript | 昔はクラスがなかったが、今はclass を使える |
まとめ:クラスを理解すると世界が広がる!
- クラスは 設計図
- そこから作られるオブジェクトは 実物
- 初めは難しく見えるけど、「車」や「ゲームキャラ」を例にすると理解しやすい
- クラスを使えるようになると、プログラミングが一気にわかりやすく、かっこいいアプリも作れるようになる
クラスは最初はむずかしいですが、しっかり理解すると「プログラマーとしての成長の第一歩」になります。
一度身につければ、ゲーム制作、アプリ開発、AIプログラムまで、幅広く応用できる強力なスキルです。
この記事もあわせて読んで欲しい
ここからはクラスの練習問題(課題一覧/答えは下にあります)
課題 | 内容 | 練習できるポイント | 例え・ヒント |
---|---|---|---|
① 動物クラスを作る | 動物の名前・鳴き声を属性にして、鳴くメソッドを作る | __init__ と self の理解 | 「犬:ワンワン」「猫:ニャー」など |
② 電卓クラスを作る | 足し算・引き算・掛け算・割り算をメソッドで作る | メソッドの使い方 | add(2, 3) → 5 |
③ 学生クラスを作る | 名前・点数を持たせて、平均点を計算するメソッドを作る | 属性の使い方 | 「山田:80点、佐藤:90点 → 平均85点」 |
④ 車クラスを作る | 色やメーカーを属性にして、走る・止まるをメソッドにする | オブジェクトを複数作る練習 | 「赤いトヨタ」「青いホンダ」など |
⑤ ゲームキャラクター | 名前・HP・攻撃力を属性にして、攻撃メソッドを作る | クラスの応用 | 「勇者が魔法使いに攻撃!」 |
⑥ 継承してみる | 「動物クラス」を作り、犬や猫クラスを継承する | inheritance (継承)の理解 | 共通部分をまとめて再利用 |
⑦ ショッピングカート | 商品を追加・削除できるクラス | リストやオブジェクトの管理 | 「リンゴ・バナナをカートに追加」 |
⑧ 本棚クラス | 本のタイトルを追加・表示できる | データをためて使う練習 | add_book("ハリーポッター") |
ステップアップの流れ
- 動物クラスや電卓クラス → すぐ作れるので超初心者向け
- 学生クラス・車クラス → 複数のオブジェクトを扱う練習
- ゲームキャラや継承 → クラスの応用(ゲームやアプリに近い)
- ショッピングカート・本棚 → 実用的な練習
① 動物クラスを作る
ねらい:__init__
と self
の基本。「属性(データ)」と「メソッド(動き)」のセットを体感。
作り方:名前と鳴き声を受け取り、cry()
で鳴く。
class Animal:
def __init__(self, name, voice):
self.name = name # 属性(データ)
self.voice = voice
def cry(self): # メソッド(動き)
print(f"{self.name}:{self.voice}")
dog = Animal("犬", "ワンワン")
cat = Animal("猫", "ニャー")
dog.cry()
cat.cry()
結果:
犬:ワンワン
猫:ニャー
② 電卓クラスを作る
ねらい:メソッドを複数持たせる練習。戻り値(return
)に慣れる。
作り方:add/sub/mul/div
を定義。
class Calc:
def add(self, a, b):
return a + b
def sub(self, a, b):
return a - b
def mul(self, a, b):
return a * b
def div(self, a, b):
if b == 0:
return "0で割れないよ"
return a / b
c = Calc()
print(c.add(2, 3))
print(c.div(10, 2))
print(c.div(1, 0))
結果:
5
5.0
0で割れないよ
③ 学生クラス(平均点)
ねらい:リストなどのデータを属性に持つ。計算メソッドで処理。
作り方:scores
を受け取り、avg()
で平均。
class Student:
def __init__(self, name, scores):
self.name = name
self.scores = scores # 例: [80, 90, 70]
def avg(self):
return sum(self.scores) / len(self.scores)
yamada = Student("山田", [80, 90, 70])
print(yamada.name, "の平均:", yamada.avg())
結果:
山田 の平均: 80.0
④ 車クラス(複数オブジェクト)
ねらい:同じ設計図から「個体差のある実物」を複数作る。
作り方:色・メーカーを属性に、drive()
と stop()
を用意。
class Car:
def __init__(self, color, brand):
self.color = color
self.brand = brand
def drive(self):
print(f"{self.color}の{self.brand}が走る!")
def stop(self):
print(f"{self.color}の{self.brand}が止まる!")
c1 = Car("赤", "トヨタ")
c2 = Car("青", "ホンダ")
c1.drive()
c2.stop()
結果:
赤のトヨタが走る!
青のホンダが止まる!
⑤ ゲームキャラクター(攻撃)
ねらい:状態(HP)が行動で変わる「オブジェクト同士のやりとり」。
作り方:attack(target)
で相手のHPを減らす。
class Player:
def __init__(self, name, hp, atk):
self.name = name
self.hp = hp
self.atk = atk
def attack(self, target):
target.hp -= self.atk
print(f"{self.name}が{target.name}に{self.atk}ダメージ! 残りHP:{target.hp}")
hero = Player("勇者", 100, 20)
mage = Player("魔法使い", 80, 12)
hero.attack(mage)
mage.attack(hero)
結果(例):
勇者が魔法使いに20ダメージ! 残りHP:60
魔法使いが勇者に12ダメージ! 残りHP:88
⑥ 継承してみる(共通をまとめる)
ねらい:inheritance(継承)
で重複を減らす。super()
の使い方。
作り方:Animal
を親に、Dog
/Cat
を子として作る。
class Animal:
def __init__(self, name):
self.name = name
def info(self):
return f"名前:{self.name}"
class Dog(Animal):
def __init__(self, name):
super().__init__(name) # 親の初期化も使う
def cry(self):
print(f"{self.info()} / ワンワン")
class Cat(Animal):
def cry(self):
print(f"{self.info()} / ニャー")
Dog("ポチ").cry()
Cat("タマ").cry()
結果:
名前:ポチ / ワンワン
名前:タマ / ニャー
⑦ ショッピングカート
ねらい:オブジェクト内で「コレクション(リスト)」を管理する。合計金額の計算。
作り方:商品名と価格を追加・削除・合計。
class Cart:
def __init__(self):
self.items = [] # 例: [{"name":"リンゴ","price":120}, ...]
def add(self, name, price):
self.items.append({"name": name, "price": price})
def remove(self, name):
self.items = [i for i in self.items if i["name"] != name]
def total(self):
return sum(i["price"] for i in self.items)
cart = Cart()
cart.add("リンゴ", 120)
cart.add("バナナ", 150)
print("合計:", cart.total())
cart.remove("リンゴ")
print("合計:", cart.total())
結果:
合計: 270
合計: 150
⑧ 本棚クラス(追加・一覧)
ねらい:データの登録と表示の基本。「文字列の整形」も練習。
作り方:add_book(title)
と list_books()
。
class Bookshelf:
def __init__(self):
self.titles = []
def add_book(self, title):
self.titles.append(title)
def list_books(self):
if not self.titles:
print("まだ本がありません。")
return
for i, t in enumerate(self.titles, start=1):
print(f"{i}. {t}")
shelf = Bookshelf()
shelf.add_book("ハリー・ポッター")
shelf.add_book("走れメロス")
shelf.list_books()
結果:
1. ハリー・ポッター
2. 走れメロス
学びを深める小ワザ(共通)
- printだけで終わらせない:計算結果はできるだけ
return
して、使い回せる形に。 - 型の想定を決める:数字か文字かを想定して、エラーを減らす(0割チェックなど)。
- 最小から作る:まずは属性1個+メソッド1個でOK。動いたら機能追加。
- docstringを書く:クラスやメソッドの先頭に簡単な説明を書くと読みやすい。
Pythonに興味あるなら、迷わずココ!まずは記事を読んでみて