Pythonのコンストラクタ(__init__)の使い方!初心者でもわかるオブジェクトの初期化
生徒
「Pythonでクラスを作ったら、__init__っていう見慣れないものが出てきました。これは何をするものなんですか?」
先生
「Pythonの__init__は、オブジェクトが作られた直後に自動で動く特別な処理です。最初の準備を担当します。」
生徒
「最初の準備というと、どんなことをするんですか?」
先生
「それでは、パソコンを触ったことがない人でもイメージできる例えで説明していきましょう。」
1. Pythonのコンストラクタ(__init__)とは何か
Pythonのコンストラクタとは、クラスからオブジェクトを作った瞬間に自動で実行される特別なメソッドです。名前は必ず__init__と書きます。メソッドとは、プログラムの中で使う処理のまとまりのことです。
とても簡単に言うと、コンストラクタは「生まれたばかりのオブジェクトに、最初の設定をする係」です。例えば、人が生まれたときに名前を決めたり、年齢を記録したりするのと同じ役割です。
2. クラスとオブジェクトを超かんたんに理解しよう
Pythonのオブジェクト指向を理解するには、「クラス」と「オブジェクト」を知ることが大切です。クラスは設計図、オブジェクトは実物だと考えてください。
たい焼きで例えると、たい焼きの型がクラスで、実際に焼けたたい焼きがオブジェクトです。型だけでは食べられませんが、型を使うことで何個でもたい焼きを作れます。
Pythonでは、クラスからオブジェクトを作るときに、コンストラクタが自動で呼ばれます。
3. __init__を使った一番シンプルな例
ここでは、名前を記録するだけのクラスを使って、Pythonのコンストラクタの基本的な使い方を見てみましょう。
class Person:
def __init__(self, name):
self.name = name
person1 = Person("たろう")
print(person1.name)
実行結果は次のようになります。
たろう
selfは「自分自身のオブジェクト」を表す言葉です。難しく感じますが、「この人自身の名前」という意味だと思って大丈夫です。
4. コンストラクタで初期化するという考え方
初期化とは、「最初の状態を決めること」です。Pythonのコンストラクタでは、オブジェクトが使われる前に必要な情報をまとめて設定できます。
例えば、ゲームを始めるときに体力が100からスタートするように決めるのも初期化です。毎回決まった状態から始められるので、プログラムが安定します。
class GameCharacter:
def __init__(self):
self.hp = 100
hero = GameCharacter()
print(hero.hp)
100
5. コンストラクタに複数の値を渡す方法
Pythonの__init__では、複数の値を受け取ることもできます。これにより、オブジェクトごとに違う情報を持たせられます。
これは、会員登録のときに名前と年齢を同時に入力するイメージです。
class User:
def __init__(self, name, age):
self.name = name
self.age = age
user1 = User("はなこ", 20)
print(user1.name)
print(user1.age)
はなこ
20
6. なぜ__init__という名前なのか
__init__はアンダースコアが前後に二つ付いた、特別な名前です。これは「特別な決まりごと」としてPythonに用意されています。
このような名前のメソッドは、Pythonが自動で呼び出します。そのため、私たちが直接__init__を実行する必要はありません。
クラスからオブジェクトを作った瞬間に動く、それがコンストラクタです。
7. コンストラクタを使うメリット
Pythonでコンストラクタを使う最大のメリットは、設定忘れを防げることです。最初に必要な情報を必ず用意するため、後からエラーが起きにくくなります。
また、同じクラスから作られたオブジェクトが、同じルールで初期化されるため、プログラム全体が読みやすくなります。
8. 初心者がつまずきやすいポイント
初心者がよく戸惑うのがselfの存在です。これは特別な変数で、「このオブジェクト自身」を意味します。
もう一つは、__init__を書かなくてもクラスは作れる点です。ただし、その場合は初期設定ができないため、少し複雑な処理になると困ることが増えます。
Pythonのオブジェクト指向を学ぶうえで、コンストラクタはとても重要な基礎なので、焦らず何度も見返してください。