本記事ではPython のクラスについて分かりやすく解説します。情報量が多いため、長文となってしまいましたが、ゆっくりご覧になってください。
クラスとは
プログラミングにおけるクラスは、あるグループとして定義された再現可能な作業工程の情報の集合体です。料理の世界で例えるなら、「料理本」のようなものです。
料理本には和風料理、洋食料理、弁当用料理といった複数のジャンルがあり、たくさんのメニューがあります。料理本に書かれた料理を作るためには、料理本と全く同じ材料、時間、作業を行えばできます。また、材料を変えて料理を行えば、同じ作業工程でも違う料理を作ることができます。
今説明した料理本のように、プログラミングにおけるクラスとは、あるジャンルにおける再現可能な作業工程の集合体です。クラスで定義した同じ型の変数を入れる必要がありますが、同じ作業工程を別の変数でも実行することができるようになります。
プログラミングにおける関数との違い
プログラミングにおける関数との大きな違いは「ジャンル分けされているか」といった違いがあります。
クラスと同様に関数を料理のマニュアルで例えるとすれば、「ネット上で検索できる料理メニュー」です。ネットでカレーの作り方を検索する場合、「カレー 作り方」のように検索して探すと思います。また料理本との比較すると、物理的(置く場所がなくなる)、金銭的には有利ですが、他者にたくさん情報を共有する時やカテゴライズを自分で行うという点では不利です。
関数とクラスの違いはこの料理本とネット検索の関係と似ています。関数では、メモリ(物理的な場所みたいなもの)が少ない、使用したい関数だけ検索すればよい、といったメリットがありますが、ジャンル毎にまとまってない、大人数で開発したり、他者に情報を共有するのが難しいといったデメリットがあります。
このため、自作でプログラムを組む場合、関数ベースでプログラムを組むことが多いですが、配布する時や大人数で一つの製品を作る際にはクラスベースでプログラムを組むことが多いです。
クラスで使用するプログラミング専門用語
- オブジェクト
データと処理をグループ化して定義できるもの。Python では1 や “Hello” などのリテラルもオブジェクトに該当する。リテラルについては以下の記事を参照。
- メソッド
クラスで使用することができる処理や操作のこと。
- インスタンス
クラスを基に作成したオブジェクトのこと。またクラスにオブジェクトを代入した状態のこと。この状態になると、クラスの中に入っているメソッドを使えるようになる。例えるなら、料理本に書かれてある材料を全て手元に揃え、料理する一歩手前の状態がインスタンスに該当する。
クラスのプログラミング
クラスのプログラミングは以下のように記述します。
class クラス名():
def 関数名1(変数1, 変数2, ・・・):
処理1
処理2
・
・
・
def 関数名2(変数1, 変数2, ・・・):
処理1
処理2
・
・
・
またクラスを使っていると、関数同士で共通の変数を使いたい、インスタンスを実行した時点で何かしらの処理を行いたい、という場面が存在します。
このような時、「def __init__」を使用します。「def __init__」がクラス内に入っていると、インスタンスを生成したときに、この関数内の処理を実行します。
「def __init__」を使用したクラスは以下のように書きます。
class クラス名():
def __init__(self, 変数1, 変数2, ・・・):
self.変数1 = 変数1
self.変数2 = 変数2
処理1
・
・
・
def 関数名1(self, 変数1, 変数2, ・・・):
# self は共通変数を使いたいときに定義。使い方はself.変数1のように取り出す。
処理1
処理2
・
・
・
クラスの使用例
2つの変数を代入すると、四則演算と税込みの計算を実行するコードを Jupyter Notebook で作成してみましょう。Jupyter Notebook のインストールは以下の URL を参考にしてください。このサイトから Python を始めた方は、ファイル名を 「class_practice」としてください。
以下がクラスの作成例になります。
class calculator():
def __init__(self, a, b):
self.a = a
self.b = b
def plus(self):
num = self.a + self.b
return num
def minus(self):
num = self.a - self.b
return num
def multiple(self):
num = self.a * self.b
return num
def devided(self):
num = self.a / self.b
return num
def tax_included(self, tax):
num_a = self.a * tax
num_b = self.b * tax
return (num_a, num_b)
次に、こちらのクラスを実行するコードを作成します。以下はコード例になります。
# variable
a = 100
b = 200
tax = 1.1
clf = calculator(a, b)
clf.plus()
clf.minus()
clf.multiple()
clf.devided()
clf.tax_included(tax)
以上を実行すると以下の結果になります。
最後に
オブジェクトを説明するにあたり、以下の記事を参考にさせていただきました。誠にありがとうございました。
本記事は以上です。ありがとうございました。