Pythonの__init__とは?クラスを理解する第一歩!

こんにちは。ゆうせいです。

Pythonのクラスを学び始めると、ほぼ必ず登場するのが__init__という名前のついたメソッドです。

「なんかアンダーバーが2個ずつ付いてて、ちょっとこわい…」
「そもそもこれは何のためにあるの?」

そんな疑問を持ったことはありませんか?

今回は、Pythonの__init__について、超やさしく、でもしっかりと解説していきます!


__init__は「初期化メソッド」

一言で言うと…

__init__は、クラスからインスタンスを作るときに最初に実行される特別なメソッドです。

Pythonではこのように使います。

class Person:
    def __init__(self, name):
        self.name = name

p = Person("ゆうせい")
print(p.name)  # ゆうせいと表示される


__init__の役割は?

  • インスタンス変数(例: self.name)に値をセットする
  • オブジェクトが作られると同時に自動で呼び出される

つまり、「インスタンスが生まれるときの初期設定係」です!


数学で言えば「初期条件」のようなもの

例えば、物理でボールを投げるときに「初速度」や「角度」を決めますよね?
__init__はそれと同じで、「インスタンスがどんな状態でスタートするか」を設定するんです。


なぜ__init__って名前なの?変えちゃだめ?

これはPythonが特別に決めた名前です。
「ダブルアンダースコア」で囲まれたこういう名前をマジックメソッド(特殊メソッド)と呼びます。

変えちゃうと、Pythonが自動で呼んでくれなくなります。


__init__を使わないとどうなる?

__init__がない場合

class Person:
    pass


p = Person()  # エラーは出ない

これは動きますが、属性(たとえば名前)を持たせることができません。

手動で設定するのは大変!

p.name = "ゆうせい"

毎回こう書かないといけないのは面倒ですよね。
__init__を使えば、スッキリ安全に設定できます。


よくある疑問に答えます!

__init__の中のselfってなに?

self今まさに作られているインスタンスそのものです。

「このインスタンスに対してnameという属性を付けるよ!」

という意味になります。

はい、そうです!

Pythonの__init__メソッドは、**コンストラクタ(constructor)**と呼ばれるものです。


コンストラクタってなに?

一言で言うと…

オブジェクト(インスタンス)が作られるときに最初に実行される特別な処理のことを、プログラミングの世界ではコンストラクタと呼びます。

たとえばJavaではこんなふうに書きます:

public class Person {
    String name;

    public Person(String name) {
        this.name = name;
    }
}

このPerson(String name)の部分がコンストラクタです。


Pythonでは__init__がコンストラクタ!

PythonにはJavaのような名前のコンストラクタはありませんが、その代わりに__init__メソッドが使われます

class Person:
    def __init__(self, name):
        self.name = name

このように、クラスからインスタンスを作るときに自動で呼ばれます。


ちょっとだけ違う点もある?

ここで少し専門的な話になりますが、実はPythonの本当の「コンストラクタ」は__new__という別のメソッドなんです。

__new____init__の違い

メソッド名タイミング役割
__new__インスタンスを「作る」ときメモリ確保・インスタンス生成
__init__インスタンスを「初期化」するとき値をセットするなどの準備

でも、通常のクラス設計では__init__だけを使えばOKです。
__new__は、イミュータブル(変更できない)な型を扱うときなど、特殊なケースで使います。



まとめと次のステップ!

  • __init__はインスタンスが作られるときに実行される初期化メソッド
  • 属性の初期値を設定するのが主な役割
  • 名前は変えず、必ず__init__で書く!
  • selfは「そのインスタンス自身」を指す

次はぜひ、__init__に複数の引数を渡してみてください!

また、Pythonの__str__メソッド(文字列として表示するためのメソッド)や、継承での__init__の上書きなども学んでいくと、クラスの理解がさらに深まりますよ。

__str__って何?」という方は、また気軽に聞いてくださいね!

セイ・コンサルティング・グループの新人エンジニア研修のメニューへのリンク

投稿者プロフィール

山崎講師
山崎講師代表取締役
セイ・コンサルティング・グループ株式会社代表取締役。
岐阜県出身。
2000年創業、2004年会社設立。
IT企業向け人材育成研修歴業界歴20年以上。
すべての無駄を省いた費用対効果の高い「筋肉質」な研修を提供します!
この記事に間違い等ありましたらぜひお知らせください。