Pythonのインスタンス変数とクラス変数の違い!selfの使い方を初心者向けに徹底解説
生徒
「Pythonのクラスって出てきたんですけど、selfとか変数の意味が全然わかりません…」
先生
「パソコンを触ったことがなくても大丈夫ですよ。箱と名前をイメージしながら、順番に見ていきましょう。」
生徒
「インスタンス変数とクラス変数って何が違うんですか?」
先生
「どの箱専用の情報なのか、みんなで共有する情報なのか、その違いなんです。」
1. Pythonのオブジェクト指向とクラスとは?
Python(パイソン)のオブジェクト指向とは、現実世界の「モノ」をプログラムの中で表現する考え方です。 たとえば「人」「車」「犬」などを、プログラム上のクラスとして作ります。
クラスとは「設計図」のようなもので、たい焼きの型をイメージすると分かりやすいです。 型(クラス)から作られる実物のたい焼きがインスタンスです。
2. インスタンス変数とは?自分専用の情報
インスタンス変数とは、作られたインスタンスごとに持つ変数です。 人で例えると「名前」や「年齢」のように、人それぞれ違う情報です。
class Person:
def __init__(self, name):
self.name = name
person1 = Person("たろう")
person2 = Person("はなこ")
print(person1.name)
print(person2.name)
たろう
はなこ
このように、同じクラスから作られても、インスタンス変数は別々に保存されます。
3. selfとは何者?超シンプルに説明
self(セルフ)は「自分自身」を指す言葉です。 プログラムの中で「この箱の中の情報ですよ」と教えるために使います。
引っ越しのときに段ボールへ名前を書くようなもので、selfがないと、どの箱の情報か分からなくなります。
class Dog:
def __init__(self, name):
self.name = name
dog = Dog("ポチ")
print(dog.name)
4. クラス変数とは?みんなで共有する情報
クラス変数は、クラスから作られた全員が同じ値を使う変数です。 たとえば「日本の首都は東京」のように、全員共通の情報です。
class School:
school_name = "ひまわり小学校"
student1 = School()
student2 = School()
print(student1.school_name)
print(student2.school_name)
ひまわり小学校
ひまわり小学校
5. インスタンス変数とクラス変数の違いを比較
ここで違いを整理しましょう。
- インスタンス変数:一人ひとり違う情報
- クラス変数:全員で共有する情報
class Cat:
species = "ネコ"
def __init__(self, name):
self.name = name
cat1 = Cat("ミケ")
cat2 = Cat("クロ")
print(cat1.name, cat1.species)
print(cat2.name, cat2.species)
6. selfを使わないとどうなるの?
selfを書かないと、Pythonは「その変数がどこにあるのか」分かりません。 結果としてエラー(プログラムの失敗)が起きます。
class Sample:
def __init__(self):
self.value = 10
sample = Sample()
print(sample.value)
selfは必ず「自分の箱の中ですよ」と教えるために必要な存在です。
7. 初心者がつまずきやすいポイント
Pythonのオブジェクト指向で初心者が混乱しやすいのは、目に見えない点です。 ですが、箱・設計図・共有ルールというイメージを持つだけで、一気に理解しやすくなります。
インスタンス変数・クラス変数・selfはセットで覚えると、Pythonの理解がぐっと深まります。