1. はじめに
Pythonでオブジェクト指向プログラミングを学ぶと、頻繁に登場するのが「__init__」と「self」というキーワードです。
この記事では、Python|クラスのinit・selfとは?わかりやすく解説というテーマで、初心者でも理解しやすいようにこれらのキーワードの役割や使い方を丁寧に解説していきます。
クラスを使ってコードを整理したり、複数のオブジェクトを管理するには、「__init__」と「self」の理解が欠かせません。
本記事では、実行結果付きのコード例を用いながら、実務でも使える知識として身につけられるように解説していきます。
2. __init__とselfの基本解説
__init__とは?
__init__
は、Pythonにおける「コンストラクタ」と呼ばれる特殊メソッドで、クラスからインスタンス(オブジェクト)が生成された直後に自動的に呼び出されます。
主に、インスタンスに初期値を設定する目的で使われます。
selfとは?
self
は、インスタンス自身を指し示す引数で、クラス内のメソッド定義では必ず最初の引数に記述します。
インスタンス変数にアクセスしたり、他のメソッドを呼び出したりする際に使います。
簡単なコード例
class Dog:
def __init__(self, name, age):
self.name = name # インスタンス変数 name に値を代入
self.age = age # インスタンス変数 age に値を代入
def bark(self):
print(f"{self.name}({self.age}歳)がワン!と吠えた")
# インスタンスの生成
dog1 = Dog("ポチ", 3)
dog1.bark()
実行結果:
ポチ(3歳)がワン!と吠えた
このように、__init__
メソッドでインスタンス変数に初期値をセットし、self
を使ってその値を他のメソッドでも利用しています。
3. よくある使い方・応用例
複数のインスタンスを扱う
クラスを使うことで、複数のオブジェクトを効率的に管理できます。以下は、複数のインスタンスをリストにまとめて扱う例です。
class Dog:
def __init__(self, name, age):
self.name = name
self.age = age
def introduce(self):
print(f"ぼくの名前は{self.name}、年齢は{self.age}歳だよ!")
# インスタンスをリストで管理
dogs = [
Dog("ポチ", 2),
Dog("タロウ", 4),
Dog("シロ", 1)
]
for dog in dogs:
dog.introduce()
実行結果:
ぼくの名前はポチ、年齢は2歳だよ!
ぼくの名前はタロウ、年齢は4歳だよ!
ぼくの名前はシロ、年齢は1歳だよ!
selfを使って他のメソッドを呼び出す
class Calculator:
def __init__(self, value):
self.value = value
def add(self, num):
self.value += num
def show(self):
print(f"現在の値:{self.value}")
def run(self):
self.add(10)
self.show()
実行結果:
現在の値:{self.value}
このように、self
を使うことで、同一インスタンス内のメソッドを呼び出すことができます。
4. 注意点・エラー対策
__init__の書き忘れ
クラスの初期化処理を忘れてしまうと、属性が設定されず、後でアクセス時にAttributeError
が発生します。
selfの書き忘れ
メソッド内でself
を書き忘れると、以下のようなエラーが出ます。
class Sample:
def show():
print("Hello")
実行結果:
TypeError: show() takes 0 positional arguments but 1 was given
このエラーは、Pythonがインスタンスを自動的に第一引数として渡す仕様に反しているために起こります。
正しくは以下のように定義しましょう。
class Sample:
def show(self):
print("Hello")
selfを使わないメソッドには@staticmethod
selfを使わないメソッドは、@staticmethod
を使って明示することで、可読性が向上します。
5. まとめ
この記事では、Pythonのクラスでよく使われる__init__
とself
の基本概念、使い方、よくあるエラーについて解説しました。
__init__
はインスタンス生成時に呼ばれる初期化メソッドself
はインスタンス自身を参照する変数- 複数のインスタンス管理や、他のメソッドとの連携に不可欠
これらを理解することで、実務でもクラス設計がスムーズになり、可読性の高いコードが書けるようになります。
クラス設計に慣れてくると、より複雑なシステムやアプリケーション開発でも応用が利くようになります。
📌学習のコツ:コードを書いてみることが最大の理解!この記事のサンプルを手元で動かしながら、体で覚えていきましょう。