Pythonのコンストラクタとは?Javaとの違いからやさしく解説!

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

今回は、「Pythonのコンストラクタ」について、Javaを勉強してきたばかりの新人エンジニアさん向けにやさしく解説します。

すでにJavaの constructor(コンストラクタ) を知っているあなたなら、きっと「Pythonでも クラスの初期化処理 をどうやるのか?」と疑問に思いますよね。

安心してください!Pythonでもちゃんと「コンストラクタに相当する仕組み」が用意されています。


Pythonのコンストラクタは「__init__()」という特別なメソッド!

Javaのコンストラクタでは、次のようなコードを書きますよね:

public class Student {
    private String name;

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

これは、Student というクラスのインスタンスを作るときに name を受け取って初期化しています。

では、Pythonではどうするのか?次のように書きます:

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

ここでのポイントは3つ!

Javaの用語Pythonの対応説明
コンストラクタ名とクラス名が同じ__init____init__ は「特殊メソッド」で、インスタンス生成時に自動で呼ばれる
thisself自分自身のインスタンスを指す。Pythonでは明示的に書く必要がある
フィールドの初期化self.変数 = 値クラス内の変数(属性)を初期化する方法

JavaとPythonのコンストラクタの違いとは?

違い1:コンストラクタ名がクラス名と一致しない

Javaでは、クラス名と同じ名前のメソッドがコンストラクタですよね。Pythonでは常に __init__() です。
しかも「ダブルアンダースコア」で囲まれていて、ちょっと見慣れないですよね?

これ、Pythonでは「マジックメソッド(特殊メソッド)」と呼ばれていて、特別な意味を持っています。

例えるなら、「電車に乗るときに自動的にドアが開く」ようなものです。
Pythonではオブジェクトを作ると自動で __init__() が呼び出されるんです。


違い2:self を明示的に書く必要がある

Pythonでは、インスタンス自身を表すキーワード self を必ずメソッドの引数として書く必要があります。

Javaだと暗黙的に this が使われますが、Pythonでは必ず明記!

def __init__(self, name):

「自分で『これは私の名前です!』と自己紹介しなきゃいけない」のがPython、
「周りが勝手に認識してくれる」のがJavaです。


どのようにインスタンスを生成するの?

s = Student("田中")
print(s.name)  # 出力:田中

ここで Student("田中") と書くと、__init__() が自動的に呼ばれ、self.name = name が実行されるという流れです。


コンストラクタにデフォルト値を設定するには?

Pythonでは、引数にデフォルト値を入れるのもカンタンです。

class Student:
    def __init__(self, name="名無し"):
        self.name = name

この場合、引数なしでインスタンスを作っても大丈夫!

s = Student()
print(s.name)  # 出力:名無し


オーバーロードはできるの?

Javaではコンストラクタを複数定義して「オーバーロード」できますよね。

public Student() {
    this.name = "名無し";
}

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

でも、Pythonにはメソッドのオーバーロードは基本的にありません

どうするか?

条件分岐やデフォルト引数を使って、同じメソッドの中で処理を分けます。

class Student:
    def __init__(self, name=None):
        if name:
            self.name = name
        else:
            self.name = "名無し"

まとめ:Pythonのコンストラクタはシンプルだけどルールがある!

特徴説明
__init__ がコンストラクタインスタンス生成時に自動で呼ばれる特殊メソッド
self を明示するJavaの this に相当するが、Pythonでは明記が必要
デフォルト引数が使える引数を省略しても動作できるようにできる
オーバーロードはできないif文やデフォルト引数を活用して一つのメソッドで条件分岐する

今後の学習の指針

これからPythonを学んでいく上で、以下のステップで理解を深めると良いでしょう。

  1. クラスとオブジェクトの基礎をしっかり固める
    • 属性(変数)とメソッドの関係を整理しよう
  2. 継承とポリモーフィズム(多態性)をPythonでどう表現するか
    • super().__init__() の使い方もここで登場します
  3. データクラス(@dataclass)にも注目!
    • Pythonでは簡潔にクラスを書くための便利な機能があるよ

必要があれば図やコード付きでまた解説しますので、遠慮なく聞いてくださいね!

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

投稿者プロフィール

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