【Python】オブジェクト その2 クラス

2022年3月10日

前項からの続きです

 

クラス

クラスとは変数と関数をひとまとまりにしたデータ型です。
Pythonのプログラムを行う上で絶対に必要な情報となりますので良く理解してください。

まずは前項のプログラムをクラスを使って書き直してみましょう。
実行するとこのような結果になるはずです。
Aさんの合計の価格は100円です
Bさんの合計の価格は180円です
Aさんのみかん購入金額は20円です
Bさんのみかん購入金額は60円です

大分印象が変わりましたね。
それでは解説します。

クラスの定義

クラスはデータと関数をひとまとまりに定義したものです。
class ○○:とすることでクラスを宣言します。
サンプルプログラムではこのように宣言しています。
class MikanRingoClass:

関数と同じようにクラス内はインデント(字下げ)して記述します。
インデントが終わるとクラスの記述も終了です。

変数宣言

クラス内に変数を宣言します。
クラス内の変数をメンバ変数と言います。
MIKAN_VAL = 10やmikan_purchase_val = 0などがメンバ変数です。
このようにいくつも記述できますので、後から理解しやすいように適宜コメントを入れましょう。
MIKAN_VAL = 10のように大文字で記述したメンバ変数は定数として使っています。
ただし以前にも説明したようにPythonには定数記述がありませんので慣習的に記述しているに過ぎません。
実際には書き換える事が出来るので注意してください。
ちなみにC言語などでは定数記述書式が決まっており、定数はプログラムで書き換えできません。

メソッド

クラス内に記述した関数をメソッドと言います。
サンプルプログラムではdef get_estimation():がメソッドになります。
基本的には一般の関数と同様ですが、第一引数はメソッド特有の記述です。
selfと記述します。(実際には何でも良いのですが慣習ですのでselfと記述すると覚えておいてください)
メンバ変数のアクセスはself.○○となります。
関数内で宣言した変数、サンプルではmikan_blockなどがそうですが、これらへのアクセスには不要です。

さてメソッドの役割ですがクラス内の変数へのアクセスとデータ更新になります。
オブジェクト指向の考え方として「カプセル化」というものがあります。
クラス内部の状態を示すメンバ変数は外部から直接アクセスはさせず、メソッドのみでアクセスします。
このように作り込むことで、外部から予期せぬアクセスにより思わす障害を未然に防ぐことが出来ます。

インスタンス

クラスを作成しただけでは、型を定義しただけです。
この型を持つ変数を作成する必要があり、生成されたオブジェクトをインスタンスと言います。
オブジェクトを作るプロセスをインスタンス化とも呼びます。

サンプルではA_data = MikanRingoClass()がインスタンス化の部分です。
A_dataの名前を持つMikanRingoClassのインスタンス(オブジェクト)が生成されました。

インスタンスからメソッドの実行

通常の関数と異なりメソッドはインスタンスに紐付いています。
サンプルでは
A_data.get_estimation()とB_data.get_estimation()がその例になります。
それぞれ購入したみかんとリンゴの数をメンバ変数に保存しています

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

お疲れ様でした。

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

 

 

Python教室

Posted by taka