プログラミングスクール デイトラ 全コース10000円OFF 8/31日まで

プログラミングの「クラス」とは?初心者でもわかる完全ガイド

9 min 16 views
classの理解

プログラミングを勉強し始めると、必ず出てくる「クラス(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("ハリーポッター")

ステップアップの流れ

  1. 動物クラスや電卓クラス → すぐ作れるので超初心者向け
  2. 学生クラス・車クラス → 複数のオブジェクトを扱う練習
  3. ゲームキャラや継承 → クラスの応用(ゲームやアプリに近い)
  4. ショッピングカート・本棚 → 実用的な練習

① 動物クラスを作る

ねらい__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に興味あるなら、迷わずココ!まずは記事を読んでみて

関連記事