Pythonのコンストラクタ(__init__)の使い方を解説!初心者でもわかるオブジェクトの初期化
生徒
「Pythonの“コンストラクタ”ってなんですか?クラスでよく見かける__init__って何をしてるんですか?」
先生
「Pythonの__init__は“コンストラクタ”と呼ばれていて、オブジェクトを作るときに最初に実行される特別な関数なんだ。」
生徒
「つまり、オブジェクトを作るときに必要な準備をしてくれるんですね?」
先生
「その通り。じゃあ、Pythonのコンストラクタの基本的な使い方を一緒に学んでみようか!」
1. コンストラクタとは何か?
Python(パイソン)のコンストラクタは、クラスからオブジェクト(実体)を作ったときに、自動的に実行される特別な関数です。このコンストラクタを使うことで、オブジェクトの初期設定を簡単に行うことができます。
具体的には__init__(ダブルアンダースコア・イニット)という関数を使います。この名前には特別な意味があり、Pythonが特別に扱う関数であることを示しています。
2. コンストラクタの基本的な書き方
まずは簡単なクラスを使って、Pythonのコンストラクタ__init__の基本的な使い方を見てみましょう。
class Person:
def __init__(self, name, age):
self.name = name
self.age = age
この例では、Personという人を表すクラスを作っています。そして、__init__の中で、nameとageという情報をオブジェクトにセットしています。
selfというのは「そのオブジェクト自身」を意味する特別なキーワードです。クラスの中で自分自身にアクセスするために使います。
3. コンストラクタを使ってインスタンスを作成してみよう
上で定義したPersonクラスから実際にオブジェクト(インスタンス)を作ってみましょう。
p1 = Person("たろう", 18)
p2 = Person("はなこ", 25)
print(p1.name)
print(p2.age)
たろう
25
このように、__init__のおかげで、インスタンスを作ると同時に中身のデータを設定することができます。
4. なぜコンストラクタが便利なのか?
もしコンストラクタがなかったら、インスタンスを作った後に、毎回nameやageを個別に設定しなければなりません。それだと手間もかかり、ミスもしやすくなります。
コンストラクタを使えば、インスタンスを作るときにすべての初期設定が終わるので、とても効率的です。
5. 引数なしのコンストラクタも使える
コンストラクタは、引数(ひきすう)を使わない形でも定義できます。つまり、最初から決めておきたい内容を中に書くこともできます。
class Hello:
def __init__(self):
print("こんにちは!Pythonへようこそ!")
greet = Hello()
こんにちは!Pythonへようこそ!
このように、インスタンスを作るだけで自動的にメッセージが表示されるような使い方もできます。
6. コンストラクタの中で他の処理を入れてみよう
コンストラクタの中には、データの保存だけでなく、条件分岐や関数の呼び出しなども書くことができます。たとえば次のような使い方です。
class Member:
def __init__(self, name, age):
self.name = name
self.age = age
if age < 20:
print(f"{name}さんは未成年です。")
else:
print(f"{name}さんは成人です。")
m1 = Member("ゆうた", 17)
m2 = Member("さき", 22)
ゆうたさんは未成年です。
さきさんは成人です。
このように、初期化のときに何か特別な処理を実行させたい場合にも、__init__はとても便利です。
7. コンストラクタとクラスの関係を身近な例でイメージしよう
クラスが「設計図」だとしたら、コンストラクタは「その設計図をもとにして商品を組み立てる作業」です。たとえばクラスが「自転車の設計図」で、コンストラクタは「タイヤをつけて、ハンドルを固定して…」という組み立て工程です。
このように考えると、__init__は「最初にやるべき準備の場所」だということがよくわかります。
8. オブジェクト指向と初期化の考え方を理解しよう
Pythonのオブジェクト指向プログラミングでは、「データ」と「動き」をひとつにまとめるのが基本です。クラスの中にデータ(変数)と動き(関数)を持たせて、作ったオブジェクトが自分で動けるようにするのです。
そのため、オブジェクトが作られるときに「どんなデータを持つか」を明確にすることがとても大切で、その役目を果たすのが__init__です。
初心者にとっては少しとっつきにくいかもしれませんが、「最初にデータを入れておく場所」と考えれば、だんだんイメージがわいてくるでしょう。