Python 基礎 5 クラスとインスタンス

Python 基礎 5 クラスとインスタンス

こんにちは、Python を使っての勉強ははかどっていますか^_^。プログラミングを習得するのは、実はそんなに難しくないです。

私の肌感覚ですが、高校1年生程度の数学ができるのなら可能なのではないかと考えています^_^;。

今回の記事でお話しするのはクラスインスタンスです。今回の話は Python でコードを書いていく上で非常に重要な部分になります。

ここがきちんと理解できていないと、機械学習を理解する上で、全く前に進むことはできません。忘れそうになったらまたこの記事を読んで復習をしてみて下さい。

まずはこのコードを見て下さい。ただの足し算の結果を出力するものになります。どうですかね、これだけ見てピンときますか?

ピンとくるわけないですよねσ^_^;。

でも安心して下さい、理解できるように解説します。それでは、いきましょう!

クラスとインスタンス

説明するために、枠で囲って、色をつけました。青枠がクラス、赤枠が関数、黄枠でインスタンスを生成しています。

まずは青枠を見て下さい。青枠の部分でクラスの中身を実装しています。これは「定義している」という部分になります。

クラスというのは、「複数の変数と関数を持つ集合体」のことです。配列を含めても構いません。例えていうとクラスというのは「家の図面」です。

実際にクラスを使うときはインスタンスを生成しなければなりません。黄枠でインスタンスを生成しています。こうすることで、「空家を生成」したという風に考えて下さい。例えていうと、この時点で初めて人が中に入ることもできるし、家具も搬入できます。調理や入浴も可能な状態になります。

コードを実行されると、上から一行ずつ処理が始まります。青枠と赤枠の部分は定義に過ぎません。まずは定義の読み込みが行われます。

ちなみに黄枠と青枠の順序を逆にするとエラーが出ます~_~;。PC が「寸法も間取りも分からんのにどうやって家を建てろっちゅうねん」っていう感じのエラーになります。

関数というのは、「ある機能を持ったものを一瞬で呼び出すもの」という風に理解して下さい。関数とはメソッドとも呼ばれます。

赤枠で囲った部分が関数です。この中では関数の中身を定義しています。関数を定義するときは 「def 関数名(引数):」 という書き方にしなくてはなりません(引数は省略することもできますが、ここではあまり気にしないでください)。

関数の中身が print文 4行だけになっているので、わざわざ関数にするまでもないのですが、今回は説明のためにわざと関数にしました。

お客さんの要望で、演算結果を出力するときは必ず print文 4行 にしなければならないとしましょう。

ですが出力するたびに print 文を 4行 も書くなんて大変ですよね。今回は一回だけなのですが、何度も何度も出力しなければならない場合、毎回4行も書くなんて面倒です。print 文の中身を変更したいとなったときも、全ての print 文を書き換えることになります。

同じ処理を何度も何度も多用する場合は、赤枠のように関数を使います。こうしておけば、処理内容を微妙に変更したいときにも便利です。関数の中身をちょっと書き換えればすみますから(^^;。

関数はクラスの中でも定義できます。今度はこちらの図を見て下さい。

オレンジと緑の枠で囲った部分がクラスの中の関数です。クラスメソッドとも呼ばれます。今回はただの足し算なので、わざわざクラスメソッドにする必要はないのですが、説明のために作ってみました。

クラスメソッドを定義するときも必ず「 def 関数名(self, 引数)」 という風に書かなくてはなりません。self というのは、クラスプロパティ使うときに引数として書きましょう。

__init__ メソッド(緑枠)というのはインスタンスが生成されたタイミングで実行されます。黄枠で囲った部分の処理が行われたタイミングで同時に緑枠の処理も行われます。このメソッドは主に初期設定を行うために使われます。

クラスの中の変数を使うときは self.output = 0 という風に書きます。わざわざ宣言する必要はありません。self.output = 0 と書いた時点で宣言が完了しています。「self.プロパティ名」 で演算に使用したり、出力できます。クラスプロパティを使用したいときはメソッドの引値に self と書かなければなりません。

インスタンスを生成したら、黒枠の部分が実行されます。

sum というインスタンスが生成されて初めて、クラスメソッドを実行することが可能になります。実行するときは 「インスタンス名.クラスメソッド名(引値)」という書き方をします。ドットでつなぐのを忘れないようにしましょう。

オレンジ枠の中を見て下さい。メイン関数(黄枠以降の部分のこと)の中から引数を引き込みたいときは def addition(self, a, b) という書き方をしなくてはなりません。メソッドのなかで、メイン関数からの引値を処理に使うときは必ずこう言った書き方になります。今回は a=10、b=20 になります。self というのは先ほども話した通り、クラスプロパティを使う際に引値として取り込むものです。引値の名前は自由に決めることができます。 a、b でなくても構いません。

一番最後の output(sum.output) というのは、赤枠で囲った output 関数を呼び出しています。今回わざわざ関数にするまでもないのですが、output 関数を多用する場合は関数を呼び出す方がいいです。毎回赤枠の処理と同じことを書くのは大変ですし、修正するときも大変ですから。

引値を output(sum.output) という風にしています。sum.output というのは、sum インスタンスの中の output という変数のことです。オレンジ枠の中で処理済みになっている物を呼び出しています。

クラスプロパティをメイン関数で呼び出すときは、「インスタンス名.クラスプロパティ」という書き方にしましょう。


以上でクラスとインスタンスの解説を終わります。

この辺りの概念は非常に難しく感じるかもしれません。ですが、高一の数学程度なのではないかと思うのです。

無茶苦茶難しいわけではありませんσ^_^;。

今回は簡単なコードなのですが、実務にもなるともっと複雑です。普通に 1000 行とかいきます。

プログラミングを勉強する一番いい方法は写経です。PC を起動させて、ひたすら手を動かして下さい。

クラス、インスタンス、メソッドの関係性は深掘りするともうちょっと複雑です。例えば、 クラスメソッドを private にしたり public するとか、継承させるとかもありますが、今はそこまで理解する必要はないと思います。

勉強、頑張って下さい^_^。

関連記事

コメント

この記事へのコメントはありません。

TOP