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__ は「特殊メソッド」で、インスタンス生成時に自動で呼ばれる |
this | self | 自分自身のインスタンスを指す。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を学んでいく上で、以下のステップで理解を深めると良いでしょう。
- クラスとオブジェクトの基礎をしっかり固める
- 属性(変数)とメソッドの関係を整理しよう
- 継承とポリモーフィズム(多態性)をPythonでどう表現するか
super().__init__()
の使い方もここで登場します
- データクラス(
@dataclass
)にも注目!- Pythonでは簡潔にクラスを書くための便利な機能があるよ
必要があれば図やコード付きでまた解説しますので、遠慮なく聞いてくださいね!
セイ・コンサルティング・グループの新人エンジニア研修のメニューへのリンク
投稿者プロフィール

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