【Python】オブジェクト その3 コンストラクタ・デストラクタ

前回でクラスについて基本を学びました。
さらにクラスについて理解を深めます。

前回のサンプルプログラムでは、みかんの情報やリンゴの情報、例えば単価などを定数値として保持していました。
しかしみかんの単価などは常に固定とは限りません。
またこのクラスを他の人が利用する場合、ソースコードを解析して定数を設定する必要があります。
サンプルプログラムは小さなクラスですからそれでも問題ありませんが、大きなクラスで定数を変更するとどのような影響範囲が想定できません。
そのような事から、前回のサンプルはまだまだ未熟であることが理解頂けると思います。

今回はクラスを生成する際に自動的に動作するメソッド「コンストラクタ」と終了時に動作する「デストラクタ」を紹介します。
特にコンストラクタを使うことで、クラスの初期値を設定することができるためとても便利です。
是非身につけてください。

コンストラクタ

コンストラクタ(イニシャライザーとも言います)とはクラスがインスタンス化される際に自動的にコールされる関数の事です。
コンストラクタを利用する事でクラスに必要な初期値を与えることが出来ます。
今回のサンプルでは、みかんやリンゴに関する定数を設定します。

デストラクタ

デストラクタ(ファイナライザーとも言います)とはクラスが破棄される時(リソースが解放されるとき)自動的にコールされる関数の事です。
クラスの破棄はdel文を利用します。
今回のサンプルにおいてはデストラクタは必要ありませんが動作が解るようにprint文を使ってコールされたタイミングを解るようにしてあります

サンプル

サンプルでは、みかんやリンゴに関する定数を設定します。
AさんとBさんで条件を変えても面白いですね。
Aさんは
みかん1個、10円、ただし2個買うと1個おまけがつく
リンゴ1個、20円、ただし3個買うと1個おまけがつく

Bさんは
みかん1個、7円、ただし5個買うと2個おまけがつく
リンゴ1個、25円、ただし2個買うと1個おまけがつく

Aさんの必要な数はみかん30個、リンゴ50個
Bさんの必要な数も同じとします。

ではサンプルをご覧下さい。
実行するとこのような結果になるはずです。

Aさんの合計の価格は960円です
Bさんの合計の価格は1004円です

Aさんのみかん購入金額は200円です
Aさんのリンゴ購入金額は760円です

Bさんのみかん購入金額は154円です
Bさんのリンゴ購入金額は850円です

A_sanのインスタンス破棄
B_sanのインスタンス破棄

コンストラクタの定義

def __init__の部分がコンストラクタの定義です。
引数の定義などは、他のメソッドと同じです。
コンストラクタはインスタンス化される際に呼び出されます。
サンプルの場合は、A_data = MikanRingoClassとB_data = MikanRingoClassの部分です。

ちなみにコンストラクタでself.MIKAN_VAL = mikan_val のように記述している場合、ここで変数MIKAN_VALの定義しているのでクラス内での宣言MIKAN_VAL = 0 は不要です。
しかしどのような変数があるのか一目で分からないので宣言を記述しています。
C++などの他の言語では宣言は必須になります。

デストラクタの定義

def __del__ の部分がデストラクタの定義です。
デストラクタはインスタンスが破棄される際に呼び出されます。
サンプルの場合はdel A_data、del B_dataの部分です。
デストラクタについては不要な事が多いと思いますが、本サンプルでは動作が解るようにprint文を行っています。

今回はここまで、まだまだオブジェクト指向は続きます。

お疲れ様でした。

python教室「総合目次」に戻る

 

Python教室

Posted by taka