Pythonのインスタンス変数とクラス変数の違い!selfの使い方を初心者向けに解説
生徒
「Pythonのクラスの中でselfをよく見かけるんですが、これって何ですか?インスタンス変数ってやつですか?」
先生
「selfはそのクラスから作られた“自分自身”のことを指すんだ。そして、インスタンス変数やクラス変数と一緒に使うことが多いんだよ。」
生徒
「えっ?クラス変数って何ですか?インスタンス変数とどう違うんですか?」
先生
「それはとても大事なポイントだね。じゃあ、インスタンス変数とクラス変数の違いと、selfの使い方をじっくり解説していこう!」
1. Pythonのインスタンス変数とは?
Python(パイソン)におけるインスタンス変数とは、「そのインスタンス(オブジェクト)だけが持つ情報」を保存するための変数のことです。
インスタンスとは、クラス(設計図)から作られた“実体”のことで、それぞれが独立したデータを持ちます。
そして、インスタンス変数を使うときには、必ずselfを使います。
class Animal:
def __init__(self, name):
self.name = name # インスタンス変数
このように、self.nameのように書くことで、インスタンスごとに名前を持たせることができます。
2. クラス変数とは?インスタンス変数との違い
一方で、クラス変数は「すべてのインスタンスで共通して使われる変数」です。
クラス変数はクラス全体で共有されるため、インスタンスをいくつ作ってもその値は同じです。
class Animal:
species = "動物" # クラス変数
def __init__(self, name):
self.name = name # インスタンス変数
この場合、speciesという変数はすべてのAnimalオブジェクトで同じ値になります。
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)
ライオン
ゾウ
動物
動物
a1とa2は別々の名前(インスタンス変数)を持っていますが、species(クラス変数)は同じ値「動物」です。
4. クラス変数は全体共通、インスタンス変数は個別の情報
ここが一番大事なポイントです。インスタンス変数は「ひとりひとりの名札」、クラス変数は「制服の色」と考えると分かりやすいです。
- インスタンス変数:個別の情報(名前・年齢など)
- クラス変数:全体で共通の情報(カテゴリ・種別など)
もしクラス変数の値を変更すると、他のインスタンスにも影響があることに注意しましょう。
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の意味と役割を理解しよう
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. 実生活にたとえてもう一度整理しよう
Pythonのクラスを「学校のクラス」にたとえてみましょう。
- クラス変数:「みんなが3年1組である」という共通情報
- インスタンス変数:「名前・出席番号・性別」など一人ひとりの情報
- self:「私自身(たろうくん自身・はなこさん自身)」を表す
このようにイメージすると、変数の役割やselfの意味が自然と理解できるようになります。