1. はじめに|Pythonの「クラス」ってなに?
Pythonを学び始めた人の中には、「クラスって難しそう…」「なんか専門的で、初心者には関係ないでしょ?」と思っている方も多いかもしれません。
でも実は、クラスはプログラミングをもっと“整理整頓”してくれる便利な仕組みなんです!
たとえば、あなたが「生徒の成績表」を作るプログラムを考えているとしましょう。
1人の生徒に対して、名前、数学、国語、英語の点数があり、さらに平均点を計算したい…。
これ、いちいち1人ずつ変数を作って計算するのはとても大変ですよね。
そこで登場するのが「クラス」です。
**クラスは、「ひとまとまりのデータとその処理を、ひとつの“型”として定義するもの」**と考えてください。
クラスを使えば、
- 名前や点数などのデータ
- 平均点を計算するなどの処理(機能)
を、セットでまとめて扱えるようになります!
さらに、同じ型から「Aさん」「Bさん」「Cさん」…と、いくらでも成績表を量産することが可能になるんです。
これは「クラス(設計図)」から「オブジェクト(実体)」を作っている、というイメージです。
この記事では、Pythonにおけるクラスの基本から、
- クラスとオブジェクトの関係
- クラスの書き方と中身の構成
- インスタンス変数やメソッドの使い方
__init__(イニシャライザ)やクラス変数の活用
まで、初心者の方でも迷わず理解できるよう、やさしく丁寧に解説していきます!
プログラミングの「整理整頓」がぐっと進むクラスの世界、一緒に学んでいきましょう!
2. クラスとオブジェクトの関係
Pythonにおける「クラス」と「オブジェクト(インスタンス)」の関係は、
**「設計図」と「それをもとに作られたもの」**というイメージで考えるとわかりやすいです。
クラス=設計図
たとえば、「成績表」というクラスを考えてみましょう。
class SchoolReport:
pass
このコードは、ただの設計図。まだ中身は空っぽです。
でもこのクラスを使えば、具体的な成績表(オブジェクト)をいくつでも作ることができるんです。
オブジェクト=クラスから作られた「実体」
クラスをもとに作られた具体的なデータのことを、オブジェクトやインスタンスと呼びます。
a_report = SchoolReport()
b_report = SchoolReport()
このように書くと、a_report と b_report という**2つの実体(オブジェクト)**が生まれます。
つまり、同じクラスからでも中身が違うオブジェクトを何個でも作れるというわけです。
イメージで理解しよう!
| 用語 | たとえ | 説明 |
|---|---|---|
| クラス | 型紙・テンプレート | どういう項目や機能があるかを定めた「設計図」 |
| オブジェクト(インスタンス) | 型紙から作られた作品 | 実際のデータ入りの“成績表”のような実体 |
なぜクラスとオブジェクトに分けるの?
もし成績表を作るたびに毎回バラバラに処理を書いていたら、コードはすぐにごちゃごちゃになりますよね。
でもクラスを使えば、「こういうデータ構造と機能をもつもの」と定義しておき、
あとはそれを元に必要な数だけオブジェクトを量産すればいいのです。

つまり、クラスは「再利用性」と「整理されたコード」のための強力な道具なんです。
3. Pythonのクラスの作り方
「クラスって便利そうだけど、どうやって書けばいいの?」
ここでは、Pythonでクラスを定義する基本の書き方と、クラスの中に何をどう書くのかを順番に説明します!
クラスの基本構文
まず、Pythonでクラスを定義するには class というキーワードを使います。
class クラス名:
# クラスの中身(属性や機能)を書く
たとえば、成績表のクラスを作るなら、こんな感じです:
class SchoolReport:
pass
この状態ではまだ中身がない「空の設計図」です。
でも、ちゃんと動くクラスとして認識されます!
クラス名のルール
Pythonでは、クラス名に**「大文字で始めるキャメルケース」**という書き方がよく使われます。
✅ よくある書き方の例:
SchoolReportUserProfileItemManager
❌ 小文字だけの名前(schoolreport)や、snake_case(school_report)は関数や変数の名前に使う形式なので、クラスにはおすすめしません。
クラスの中に書くのは「データ」と「機能」
クラスの中には、以下のような要素を定義していきます:
| 要素名 | 説明 |
|---|---|
| インスタンス変数 | オブジェクトごとに持つデータ(例:名前や点数など) |
| メソッド | オブジェクトが持つ機能(例:平均点を計算する) |
| クラス変数 | クラス全体で共通するデータ(例:学校名など) |
簡単なクラスの例
class SchoolReport:
school_name = "シーバ中学校" # クラス変数
def __init__(self, name, math, japanese, english):
self.name = name
self.math = math
self.japanese = japanese
self.english = english
def average(self):
return (self.math + self.japanese + self.english) / 3
このクラスができること:
- 生徒の名前と3教科の点数を記録できる
- 平均点を計算する機能がある
- すべての生徒が「シーバ中学校」に通っている設定
オブジェクトを作って使ってみよう!
a = SchoolReport("Aさん", 80, 75, 90)
print(a.name) # → Aさん
print(a.average()) # → 81.6666...

このように、クラスを定義しておけば、たくさんのデータを1つのかたまりとして扱えて、機能もセットにできるのです。
4. インスタンス変数とメソッドの使い方
Pythonのクラスの中で最もよく使うのが、
インスタンス変数とメソッドです。
「データ」と「機能」をオブジェクトに持たせるための、超重要なパーツなんです!
🔹 インスタンス変数とは?
インスタンス変数とは、オブジェクトごとに個別の値を持つ変数のことです。
たとえば「Aさんの成績」と「Bさんの成績」は違いますよね?
こういう個別の情報を保存するのがインスタンス変数です。
🔧 作り方
self.変数名 = 値
この self は「このオブジェクト自身」という意味です。
🔹 メソッドとは?
メソッドは、クラスの中で定義する関数のようなものです。
オブジェクトが使える「機能」を表します。
🔧 書き方
def メソッド名(self, 引数):
処理内容
return 結果
ここでも self が出てきますが、メソッドがそのオブジェクトを操作できるようにするために必要なものなんです!
🧪 例:成績表クラスでの使い方
class SchoolReport:
def __init__(self, name, math, japanese, english):
self.name = name
self.math = math
self.japanese = japanese
self.english = english
def average(self):
return (self.math + self.japanese + self.english) / 3
このコードでは、
self.name,self.mathなどが インスタンス変数average()が メソッド
です。
👨🏫 オブジェクトを使ってみよう!
a = SchoolReport("Aさん", 80, 70, 90)
print(a.name) # → Aさん(インスタンス変数にアクセス)
print(a.average()) # → 80.0(メソッドを呼び出し)
a.name→ インスタンス変数にアクセスa.average()→ メソッドを呼び出し
となります。
💡 selfのポイントまとめ
| 書き方 | 意味 |
|---|---|
self.変数名 | オブジェクトにくっついたデータ(インスタンス変数) |
self.メソッド名() | オブジェクトにくっついた機能(メソッド)を呼び出す |

「self が出てきたら、“そのオブジェクト自身を操作してる”んだな」と思えばOKです!
5. イニシャライザ(__init__ メソッド)の役割
Pythonのクラスを学んでいると、必ず目にするこの謎のメソッド👇
def __init__(self, ...):
これはただの関数ではなく、**「イニシャライザ」または「コンストラクタ」**と呼ばれる、特別な役割を持つメソッドです!
🔸 そもそも__init__ってなに?
__init__(ダブルアンダースコア イニット)は、
新しいオブジェクトを作るときに、自動で呼び出される関数です。
たとえば、以下のようなコードがあったとしましょう:
a = SchoolReport("Aさん", 80, 70, 90)
このとき、実は裏でこんなことが起きています👇
① SchoolReportというクラスをもとに、新しいオブジェクトが作られる
② 自動的に __init__ メソッドが呼ばれて、引数が渡される
③ self.name などの初期設定が行われる
つまり、**オブジェクトの「初期設定係」**みたいな存在です!
🔧 __init__ の基本構文
def __init__(self, 引数1, 引数2, ...):
self.インスタンス変数 = 引数
ここでのポイントは:
- 最初の引数は必ず
self - そのあとに必要な引数を並べる
self.変数名 = 値の形で初期値をセット
🧪 具体例で確認!
class SchoolReport:
def __init__(self, name, math, japanese, english):
self.name = name
self.math = math
self.japanese = japanese
self.english = english
このクラスでは、生徒の名前と3教科の点数をオブジェクト作成時にセットできるようになっています。
a = SchoolReport("Aさん", 80, 70, 90)
print(a.name) # → Aさん
このように書くだけで、__init__ が呼ばれ、a.name や a.math などが設定されるのです!
💡 selfは自分自身を指す!
初心者がよくつまずくポイントですが、selfに自分で値を入れる必要はありません。
# こう書くのはNG!
SchoolReport(self, "Aさん", 80, 70, 90)
これはPythonが裏で自動的にやってくれるので、呼び出す側は引数だけでOKです。
👀 まとめ:__init__は“最初の一歩”
- クラスからオブジェクトを作るときに一回だけ呼ばれる
- オブジェクトの中身(インスタンス変数)をセットする
selfはそのオブジェクト自身を指す- 呼び出すときは
クラス名(引数...)の形でOK!
6. クラス変数とインスタンス変数の違い
Pythonのクラスには、2種類の変数があります。
✔️ オブジェクトごとに違う値を持つ:インスタンス変数
✔️ すべてのオブジェクトで共通の値を持つ:クラス変数
この2つの違いをしっかり理解しておくことで、
データの整理や管理がグッと楽になります!
🔸 インスタンス変数とは?
オブジェクトごとに異なる値を持つ変数です。
たとえば「Aさんの点数」と「Bさんの点数」は違いますよね?
こういった個別データは、インスタンス変数で管理します。
self.name = name
self.がついているのがポイントです!
🔸 クラス変数とは?
クラスから作られたすべてのオブジェクトで共有される変数です。
たとえば「全員が通っている学校名」など、
どの生徒でも同じ値になるような情報は、クラス変数で管理します。
class SchoolReport:
school_name = "シーバ中学校" # ← クラス変数
クラス変数は、self.をつけずに、クラスの直下に書くのが特徴です。
🧪 インスタンス変数とクラス変数を比べてみよう
class SchoolReport:
school_name = "シーバ中学校" # ← クラス変数
def __init__(self, name, math, japanese, english):
self.name = name # ← インスタンス変数
self.math = math
self.japanese = japanese
self.english = english
def show_info(self):
print(f"{self.name}さんは{self.school_name}の生徒です。")
a = SchoolReport("Aさん", 80, 70, 90)
b = SchoolReport("Bさん", 60, 85, 75)
a.show_info() # → Aさんさんはシーバ中学校の生徒です。
b.show_info() # → Bさんさんはシーバ中学校の生徒です。
ここでは、**全員が同じ学校名(クラス変数)**を共有しているのがわかります。
✅ アクセス方法まとめ
| アクセス方法 | 説明 | 例 |
|---|---|---|
self.インスタンス変数 | オブジェクトごとに違う値 | self.name |
クラス名.クラス変数 | クラス全体で共有される値 | SchoolReport.school_name |
self.クラス変数 | クラス変数へオブジェクト経由でアクセス | self.school_name |
⚠️ クラス変数の注意点!
SchoolReport.school_name = "別の中学校"
このようにクラス変数を変更すると、すべてのオブジェクトに反映されます。
print(a.school_name) # → 別の中学校
print(b.school_name) # → 別の中学校

ですので、クラス変数は「全員共通にしたい情報だけ」に使うようにしましょう!
7. メソッド内の一時的な変数
ここまでで、self.をつけて定義するインスタンス変数やクラス変数について学びました。
でも、メソッドの中では self. をつけない変数もよく出てきます。
それが、**「一時的な変数(ローカル変数)」**です!
🔹 一時的な変数ってなに?
一時的な変数とは、**メソッドの中だけで使う“使い捨ての変数”**です。
- メソッドの外からアクセスできない
- 他のメソッドとは関係ない
- 必要なときだけ、計算用や一時的な保存用に使う
というのが特徴です。
🔧 書き方の例
class SchoolReport:
def __init__(self, name, math, japanese, english):
self.name = name
self.math = math
self.japanese = japanese
self.english = english
def average(self):
total = self.math + self.japanese + self.english # ← 一時的な変数
avg = total / 3 # ← 一時的な変数
return avg
ここで出てきた total や avg は、メソッドの中でしか使われない変数です。self. をつけないので、オブジェクトの外からアクセスしたり、保持したりする必要がないということになります。
🧪 こんなふうに使われます
a = SchoolReport("Aさん", 80, 90, 70)
print(a.average()) # → 80.0
この average() メソッドの中で total や avg は計算に使われますが、
メソッドの外では「存在しない」扱いになります。
print(a.total) # → エラー!そんな属性はないよ!
✅ self. あり/なし の使い分けまとめ
| 書き方 | 意味 | 使う場面 |
|---|---|---|
self.変数名 | インスタンス変数(オブジェクトに属する) | 他のメソッドでも使いたいとき |
変数名(selfなし) | 一時的なローカル変数(メソッド内だけ) | 計算中だけ一時的に使うとき |
💡 こんなときは self をつける!
- メソッドの外からも値を参照・変更したい
- 他のメソッドでもそのデータを使いたい
- オブジェクトごとに保持したい値がある
逆に、その場だけで使って終わりなら、self. は不要!
変数名だけで十分です。

以上で、Pythonのクラスに関する基礎的な知識は一通りカバーできました!
お疲れさまでした 😊
次は、実際にクラスを使って「成績表アプリ」を作ってみたり、
「継承」や「カプセル化」など、クラスの応用にもチャレンジしてみるとさらに理解が深まります!
✅ まとめ|クラスでコードはもっとわかりやすくなる!
Pythonのクラスは、最初は少しとっつきにくく感じるかもしれません。
でも今回の内容を通して、
- クラス=設計図
- オブジェクト=その実体
- selfとは何か
- インスタンス変数とクラス変数の違い
- メソッドの使い方
- 初期化処理(
__init__)の意味 - 一時的な変数の使い方
など、基礎をしっかり身につけられたはずです!
クラスはプログラムを「整理整頓」してくれる道具です。
複雑な処理もスッキリまとめられるようになるので、これから本格的にプログラミングを学んでいく人にとっては、とても大事な概念です。
焦らず、少しずつ自分のコードにクラスを取り入れていきましょう!
🔗 あわせて読みたい
🔸 Pythonのクラスをもっと便利に!
- 【Python入門】dataclassの使い方をやさしく解説|自動でクラスを便利に!
→ クラスの定義がもっとラクになる!自動で__init__や__repr__を作ってくれる便利機能を紹介
🔸 クラスで使う関数のスキルアップに!
- 【Python入門】引数のデフォルト値とタイプアノテーションの使い方をやさしく解説!
→ メソッドの引数設計や型ヒントの書き方を学びたい人向け - 【Python入門】可変長引数 *args と **kwargs の使い方をやさしく解説!
→ メソッドで複数の引数を柔軟に受け取りたいときに必須のテクニック
🔸 クラスでよく使う便利な構文や知識も!
- 【Python入門】lambda(ラムダ式)の使い方をわかりやすく解説|mapやfilterとの組み合わせも紹介!
→ メソッド内でちょっとした関数処理を書くときに便利な「lambda式」 - 【Python入門】ミュータブルとイミュータブルとは?初心者でもわかる違いと注意点
→ クラスの属性を扱うときに知っておきたい、変更できる・できないの違い
よくある質問(Q&A)
- Qクラスと関数ってどう違うの?
- A
関数は「一連の処理」、クラスは「データ+処理」をまとめたまとまりのある“型”です。クラスの中に関数(メソッド)を入れて使います。
- Q
selfって絶対に必要なの? - A
はい、Pythonのクラスでは
selfがないとオブジェクト自身の中身(インスタンス変数など)にアクセスできません。クラスの中のメソッドでは基本的に必須です。
- Qクラス変数っていつ使えばいいの?
- A
全てのオブジェクトで共通の値を持たせたいときに使います。例えば「学校名」「会社名」など、変わらない共通情報にぴったりです。







※当サイトはアフィリエイト広告を利用しています。リンクを経由して商品を購入された場合、当サイトに報酬が発生することがあります。
※本記事に記載しているAmazon商品情報(価格、在庫状況、割引、配送条件など)は、執筆時点のAmazon.co.jp上の情報に基づいています。
最新の価格・在庫・配送条件などの詳細は、Amazonの商品ページをご確認ください。