全般

[Python] クラス初期化(init)の基本概念と使い方

今回は、Pythonのクラス初期化(init)の基本概念と使い方についてご紹介します。

クラス初期化(init)とは

Pythonのクラスでは、インスタンスを生成する際に__init__という特別なメソッドを呼び出します。

この__init__メソッドは、インスタンス生成時の初期化処理を行うために使われます。

具体的には、インスタンスごとに必要な属性を設定したり、初期値を用意したりする役割があります。

ここで重要なのは、必ず最初の引数にselfを取ることです。

initの基本的な使い方

クラスを定義する際は、class クラス名: の中に__init__メソッドを定義します。

例えば、以下のように書くことで、クラスに属性を持たせることができます。

ここでは、self.xself.yとすることで、生成されたインスタンスごとに異なる値を保持できます。

クラスを使うには、以下のように書きます。

initを使った具体例

1. シンプルなクラス例

最初に、Personというクラスを定義します。

名前と年齢を管理し、自己紹介を行うメソッドを用意します。

実行結果

私の名前は 太郎 です。年齢は 20 歳です。
私の名前は 花子 です。年齢は 0 歳です。

2. 入力値の検証を行うクラス例

次に、初期残高に制限を設ける銀行口座のクラスを例示します。

初期残高がマイナスにならないように、ValueErrorを発生させる仕様を加えています。

実行結果

Aliceさんの残高は 1200 円です。

3. 継承とsuper()を使ったinitの拡張例

既存のクラスを継承し、共通部分を再利用しながら追加の属性を設定する例です。

実行結果

佐藤 の給料は 500000 円です。
部署: 営業部

よくあるエラーや注意点

クラスの__init__メソッドを使う際には、いくつか知っておきたいポイントがあります。

  • selfの使用必須: インスタンスメソッド(__init__含む)では、第一引数をselfとすることが規約です。
  • ミュータブルなデフォルト引数: listやdictなどをデフォルト引数に設定すると、複数インスタンスで同じオブジェクトが共有される場合があります。必要に応じてNoneを使って対策するのがおすすめです。
  • エラーチェック: __init__で受け取った値が不正な場合は、例外を発生させるなどして安全な初期化を行います。
  • super()の利用: 継承を使う際は、親クラスの初期化を再利用したいときにsuper()を活用します。

まとめ

__init__メソッドは、インスタンス生成時の重要な初期化処理を担当します。

必要な属性の設定やエラーチェックなどを含めることで、信頼性の高いコードを構築できます。

また、継承やsuper()と組み合わせることで、コードの再利用性をさらに高められます。