カテゴリ: Python 更新日: 2025/11/21

Pythonのインスタンス変数とクラス変数の違い!selfの使い方を初心者向けに解説

Pythonのインスタンス変数とクラス変数の違い!selfの使い方を解説
Pythonのインスタンス変数とクラス変数の違い!selfの使い方を解説

先生と生徒の会話形式で理解しよう

生徒

「Pythonのクラスの中でselfをよく見かけるんですが、これって何ですか?インスタンス変数ってやつですか?」

先生

selfはそのクラスから作られた“自分自身”のことを指すんだ。そして、インスタンス変数やクラス変数と一緒に使うことが多いんだよ。」

生徒

「えっ?クラス変数って何ですか?インスタンス変数とどう違うんですか?」

先生

「それはとても大事なポイントだね。じゃあ、インスタンス変数とクラス変数の違いと、selfの使い方をじっくり解説していこう!」

-

1. Pythonのインスタンス変数とは?

1. Pythonのインスタンス変数とは?
1. Pythonのインスタンス変数とは?

Python(パイソン)におけるインスタンス変数とは、「そのインスタンス(オブジェクト)だけが持つ情報」を保存するための変数のことです。

インスタンスとは、クラス(設計図)から作られた“実体”のことで、それぞれが独立したデータを持ちます。

そして、インスタンス変数を使うときには、必ずselfを使います。


class Animal:
    def __init__(self, name):
        self.name = name  # インスタンス変数

このように、self.nameのように書くことで、インスタンスごとに名前を持たせることができます。

2. クラス変数とは?インスタンス変数との違い

2. クラス変数とは?インスタンス変数との違い
2. クラス変数とは?インスタンス変数との違い

一方で、クラス変数は「すべてのインスタンスで共通して使われる変数」です。

クラス変数はクラス全体で共有されるため、インスタンスをいくつ作ってもその値は同じです。


class Animal:
    species = "動物"  # クラス変数

    def __init__(self, name):
        self.name = name  # インスタンス変数

この場合、speciesという変数はすべてのAnimalオブジェクトで同じ値になります。

3. 実際にインスタンス変数とクラス変数を使ってみよう

3. 実際にインスタンス変数とクラス変数を使ってみよう
3. 実際にインスタンス変数とクラス変数を使ってみよう

ここで、インスタンス変数とクラス変数の違いを具体的に見てみましょう。


class Animal:
    species = "動物"  # クラス変数

    def __init__(self, name):
        self.name = name  # インスタンス変数

a1 = Animal("ライオン")
a2 = Animal("ゾウ")

print(a1.name)
print(a2.name)
print(a1.species)
print(a2.species)

ライオン
ゾウ
動物
動物

a1a2は別々の名前(インスタンス変数)を持っていますが、species(クラス変数)は同じ値「動物」です。

4. クラス変数は全体共通、インスタンス変数は個別の情報

4. クラス変数は全体共通、インスタンス変数は個別の情報
4. クラス変数は全体共通、インスタンス変数は個別の情報

ここが一番大事なポイントです。インスタンス変数は「ひとりひとりの名札」、クラス変数は「制服の色」と考えると分かりやすいです。

  • インスタンス変数:個別の情報(名前・年齢など)
  • クラス変数:全体で共通の情報(カテゴリ・種別など)

もしクラス変数の値を変更すると、他のインスタンスにも影響があることに注意しましょう。

-

5. クラス変数を書き換えるとどうなる?

5. クラス変数を書き換えるとどうなる?
5. クラス変数を書き換えるとどうなる?

クラス変数をインスタンスから書き換えると、実は“そのインスタンスだけの変数”が新たに作られます。つまりクラス変数ではなくなります。


class Animal:
    species = "動物"

    def __init__(self, name):
        self.name = name

a1 = Animal("キリン")
a2 = Animal("サイ")

a1.species = "哺乳類"

print(a1.species)
print(a2.species)

哺乳類
動物

a1.speciesを変えたつもりが、a1だけに新しい変数ができただけで、クラス変数は変わっていません。

6. selfの意味と役割を理解しよう

6. selfの意味と役割を理解しよう
6. selfの意味と役割を理解しよう

selfはPythonのクラスの中で「自分自身のこと」を指すキーワードです。

たとえばself.nameと書くと、「そのオブジェクト自身のname変数」を意味します。selfを使わずに変数を書いてしまうと、ローカル変数(関数の中だけで使われる変数)になってしまいます。


class Student:
    def __init__(self, name):
        name = name  # これは間違い

s = Student("たかし")
print(s.name)  # エラーになる

このように、selfをつけないと、クラスの外から使うことができません。正しくは以下のように書きます。


class Student:
    def __init__(self, name):
        self.name = name  # 正しい

7. 実生活にたとえてもう一度整理しよう

7. 実生活にたとえてもう一度整理しよう
7. 実生活にたとえてもう一度整理しよう

Pythonのクラスを「学校のクラス」にたとえてみましょう。

  • クラス変数:「みんなが3年1組である」という共通情報
  • インスタンス変数:「名前・出席番号・性別」など一人ひとりの情報
  • self:「私自身(たろうくん自身・はなこさん自身)」を表す

このようにイメージすると、変数の役割やselfの意味が自然と理解できるようになります。

コメント
コメント投稿は、ログインしてください

まだ口コミはありません。

関連記事:
カテゴリの一覧へ
新着記事
New1
PHP
PHP のフォームデータの受け取り($_POST, $_GET)を完全解説!初心者向けガイド
New2
PHP
PHPのスコープとは?グローバル・ローカル・スーパーグローバルを完全解説!
New3
PHP
PHPの演算子をやさしく解説!算術・比較・論理・ビット演算子の使い方
New4
PHP
PHP の変数とは?基本的な使い方とデータ型を徹底解説!
-
人気記事
No.1
Java&Spring記事人気No1
Python
Pythonで辞書のキー・値・アイテムを取得する方法(keys(), values())
No.2
Java&Spring記事人気No2
Python
Pythonで辞書のネスト構造(入れ子辞書)を扱う方法 初心者向け完全ガイド
No.3
Java&Spring記事人気No3
Python
Pythonでエラースタックトレースを表示・取得する方法を徹底解説!初心者向け例外処理入門
No.4
Java&Spring記事人気No4
Python
PythonでMySQLに接続する方法を完全解説!初心者でもわかるpymysqlの基本
No.5
Java&Spring記事人気No5
Python
PythonでExcelファイル(.xlsx)を操作する方法を徹底解説!初心者でもできるopenpyxl・pandasの使い方
No.6
Java&Spring記事人気No6
PHP
PHP の日付と時間の取得(date, time, strtotime)を完全解説!初心者でもわかる使い方
No.7
Java&Spring記事人気No7
PHP
PHPで画像ファイルをアップロードする方法を初心者向けに徹底解説!わかりやすい画像処理入門
No.8
Java&Spring記事人気No8
PHP
PHP のデータ型を完全ガイド!初心者でもわかる int, string, float, bool など
-
-