- 「クラスとかオブジェクト指向とか言われてもサッパリ…」
- 「__init__って急に出てきたけど何?」
Pythonの勉強を進めていて、こんな経験はありませんか?
特に、 __init__という見慣れない記述に、どのような役割を持っているのか疑問を抱きやすいポイントになります。とりあえず定型文のように記述しているものの、仕組みがよく理解できていないという声も少なくありません。
しかし、身近な具体例に置き換えて考えてみると、その仕組みは意外とシンプルです。
今回は、日常的な例えを交えながら、__init__の役割と基本的な使い方を丁寧にご紹介します!
__init__はたい焼きを焼き上げる前の仕込み作業
Pythonにおけるクラスは、よく「たい焼きの焼き型」に例えられます。この焼き型を使って焼き上げられた個々のたい焼きのことを、プログラミングではインスタンス(実体)と呼びます。
この仕組みを踏まえると、今回のテーマである __init__(コンストラクタ)は、たい焼きを焼き上げるときに、中身(あんこやクリームなど)をセットする最初の仕込み作業に当たります。
つまり、クラスから新しいインスタンスが作られる瞬間に自動的に呼び出され、そのインスタンスが持つべき初期状態やデータを設定する専用の関数が__init__になります。
インスタンスが生まれた瞬間に必ず1回だけ実行される初期設定処理と捉えるとイメージしやすいでしょう。
たい焼きクラスを作成して動かしてみる
実際に簡単なPythonプログラムを作成し、動作を確認してみましょう。
# たい焼きの型(クラス)を定義します
class Taiyaki:
# インスタンス生成時に自動的に呼び出される初期設定です
def __init__(self, nakami):
self.nakami = nakami # 注文された中身を設定します
self.price = 150 # 基本価格を150円に設定します
print(f"{self.nakami}のたい焼きを仕込みました。")
# たい焼きの情報を表示する機能(メソッド)
def show_info(self):
print(f"中身: {self.nakami} / 価格: {self.price}円")
# あんこのたい焼きを生成します
# Taiyaki("あんこ") を実行した瞬間に、裏側で__init__が自動で動きます
taiyaki_1 = Taiyaki("あんこ")
taiyaki_1.show_info()
print("---")
# カスタードのたい焼きを生成します
taiyaki_2 = Taiyaki("カスタード")
taiyaki_2.show_info()
いかがでしょうか?
コードを実行すると、Taiyaki(“あんこ”) と呼び出した瞬間に __init__ が自動で動作し、中身が「あんこ」、価格が「150円」という初期値を持ったインスタンスが生成されます。
第一引数に指定されているselfは、これから作られる自分自身のインスタンスを指しています。self.nakami = nakamiと書くことで、自分自身の属性として受け取った中身の情報をしっかり保持できます。
さらに、種類ごとに値段を変更したい場合は、引数として受け取るようにします。
今回はinitのカッコの中にpriceを追加します。さらに値段を何も指定しなかった場合はこれまでの150円になるように「デフォルト値」を設定しておくと、普段は中身を書くだけで済み、価格を変えたいときだけ指定できるようになって便利です。
class Taiyaki:
def __init__(self, nakami, price=150):
self.nakami = nakami
self.price = price
print(f"{self.nakami}のたい焼きを仕込みました。")
def show_info(self):
print(f"中身: {self.nakami} / 価格: {self.price}円")
# 通常価格(150円)のあんこ
taiyaki_1 = Taiyaki("あんこ")
taiyaki_1.show_info()
print("---")
# 200円のプレミアムカスタード
taiyaki_2 = Taiyaki("プレミアムカスタード", 200)
taiyaki_2.show_info()
実務におけるクラスと__init__の活用メリット
この仕組みは趣味のプログラミングだけでなく、業務効率化やバックオフィス業務のデータ処理でも大きな威力を発揮します。
例えば、顧客データや請求書データを扱うプログラムを作成する場合を考えてみてください。Customerというクラスを用意し、__init__の中で顧客名や取引先コード、メールアドレスなどを初期設定するように設計します。
このようにあらかじめ__init__で必須の初期データを正しくセットしておくことで、データが未設定のまま後続の処理へ進んでしまうバグを防ぐことができます。
これで複数のデータを一貫した形式で整理整頓して扱えるようになるため、保守性の高いコードを書くための土台が整います。
まとめ
__init__は、クラスから実体(インスタンス)を生み出す際に、最初に必要な準備を自動で行ってくれる頼もしい初期化機能です。
まずはご紹介したコードをもとに、中身をチョコレートやチーズに変更したり、新しくトッピングなどの引数を追加したりして、動作の変化を試してみてください。実際に手を動かしてコードの反応を確かめることが、理解を深める一番の近道になります!
Pythonの本は種類が多すぎて、業務効率化に使えるのか見分けるのが大変ですよね。実務自動化に5年以上携わってきた私が、「デスクワークの自動化に即戦力になった本」を厳選して紹介します。失敗しない1冊を見つけたい方は、ぜひ参考にしてみてください。

コメント