今回は、Pythonのクラスについて学習していきましょう!
- クラスの役割を知りたい
- クラスについて基本的な使い方を知りたい
- そもそもクラスってなんだ?初めてでもわかるような説明が欲しい
って方向けの内容となっています。
コンテンツ
無料オンライン相談を活用しよう!
Pythonというプログラミング言語は機械学習の人気の高まりなどもあり、様々なスクールが無料説明会を開催しています。
その中でも「Freeks(フリークス)|業界初!10,780円のサブスク型プログラミングスクール」がオススメです。Pythonを効率よく学びたいという方はまずは適性を知るためにも無料説明会を利用しましょう。
Let’s practice a little!!
クラスとは
「クラス」とは、オブジェクト指向のプログラミングを行うための基本的な概念です。
では、「オブジェクト指向」とは何でしょうか?
オブジェクト指向。それは、人間のために考えられた、プログラムを組む時の煩雑さを解決するための方法で、「人間が把握できるようにするためのプログラム開発」を実現しようというものです。
うん!ムズイ!
まぁ、この説明自体がすでに煩雑みたいなところがありますね笑
つまりは、数百、数千行と大きくなったプログラムを追加、編集するときにできるだけわかりやすくしていこうということです。
Pythonにおける「クラス」を理解することのメリットは以下の通りです。
- 膨大になったプログラムを編集しやすくなる
- プログラムを再利用しやすくなる
おや?関数のメリットと同じような…
うん!一緒やで!笑
全体のコードを理解しやすく、まとめるといった点ではクラスも同じかもしれませんね。
唐突ですが、学校の教室はいくつかのクラス(教室)が存在し、そのクラスメートはいくつかのグループで存在します。このように、Pythonにおけるクラスは、関数をまとめたものと考えていただければいいと思います。
前回は例外処理についての記述でした。(唐突)
【Python入門】初めてのプログラミング(例外処理 – 2)
前回の記事
せっかくなので、復習のためにも、前回の内容にも関わるプログラムでクラスについての説明をしていきます。頑張っていきましょう!
クラスの用途
大きなプログラムを作っているときに、たくさんの関数を扱う時を想像してください。簡単な例として、四則演算を行うプログラムを考えていきましょう。以下のコードを見てください。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
def Sum(x, y): return x + y def Sub(x, y): return x - y def Mul(x, y): return x * y def Div(x, y): try: return x / y except ZeroDivisionError as e: return e |
一つ一つの関数は簡単で分かりやすいものですが、こういった関数が何個もある場合、計算する関数を一つにまとめたいと思うようになります。具体的な書き方、使い方を見ていきましょう!
クラスの基本
クラスの最も基本となる書き方は以下の通りです。
1 2 3 |
class 名前: pass |
「class」と予約語を書き、そのあとにクラスの名前を宣言してあげましょう。
予約語とは、「if」「not」など、すでに特定の意味があるものです。
先ほどの四則演算をクラスとしてまとめた場合の例と、その中の関数の呼び方や使い方の例は以下の通りです。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
class Calc: def Sum(x, y): return x + y def Sub(x, y): return x - y def Mul(x, y): return x * y def Div(x, y): try: return x / y except ZeroDivisionError as e: return e |
このクラスを実行する方法は以下の通りです。
1 2 3 4 5 6 7 8 9 |
print(Calc.Sum(1, 2)) #3 print(Calc.Sub(1, 2)) #-1 print(Calc.Mul(1, 2)) #2 print(Calc.Div(1, 2)) #0.5 |
肝心なのは、クラスの使い方ですね。「.」(ドット)は、日本語で言うと、「~の」という意味です。今回の場合、「Calc」クラスの(変数名)という感じですね。
このようにすることで、たくさんの関数をいくつかのカテゴリー別に分けることができ、全体のプログラムを把握しやすくなります。
Let’s practice more!!
複数のクラス
Pythonでは当然複数のクラスを作成することが出来ます。そして、クラスの中に別のクラスを用いることも可能です。今回の例では、先ほどの「Calc」クラスをそのまま再利用した例を紹介します。
まずは、「Select」クラスです。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
class Select: ans = 0 def select(num, x, y): global ans if num == 1: ans = Calc.Sum(x, y) elif num == 2: ans = Calc.Sub(x, y) elif num == 3: ans = Calc.Mul(x, y) elif num == 4: ans = Calc.Div(x, y) def Print(): print("計算結果は" + str(ans) + "です。") |
このクラスでは、2つのメソッド(関数)が定義されています。
1つ目のメソッドでは、利用する関数を選択するために、受け取った数値をもとにそれぞれの処理を行っています。そして、2つ目のメソッドで、計算結果を出力するための処理を施しています。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
class Start: def start(): print("1:和, 2:差, 3:積, 4:商") while True: try: num = int(input("1 ~ 4の命令番号を入力:")) if 1 <= num <= 4: break except ValueError: print("数字を入力してください。") while True: try: x, y = map(int, input("二つの数字を入力").split()) break except ValueError: print("数字を入力してください。") Select.select(num, x, y) Select.Print() |
続いて、「Start」クラスです。
このクラスでは、メソッドは1つで、計算方法を指定するための数字を入力する処理を記述しています。
1 2 |
if __name__ == "__main__": Start.start() |
最後に、「Start」クラスを実行するためのコードです。
今回の例では、クラスの使い方を理解するためのコードとなっており、あまり実用的ではないかなと思いますが、内容は理解していただけたでしょうか?
Today’s final practice!!
まとめ
本日は、オブジェクト指向を学ぶための準備として、クラスについて学習しました。ほかのクラスを参照する場合には、「(クラス名).(関数名)」という形で記述すればよいということがわかりました。
慣れるまでは難しいと思いますが、頑張ってください。
クラスとして、同じような処理や関数を分けることで、大規模なプログラムを組む際にも、認知的負担が軽減されるため、人間にとって役に立つ概念だということが理解していただけたら嬉しいです。
本日の理解度調査
今日の最後に理解度調査をします!!
どうすれば正しくなるのか考えてみてね!!
Q.縦30、横40の長さの三角形のもう一つの辺の長さを求めるプログラムを完成させよ。
1 2 3 4 5 6 7 8 9 10 |
import math class Calc: def Sqrt(a, b): return math.sqrt(???) if __name__ == "__main__": c = ??? print(c) #50.0 |
正解は。。。
1 2 3 4 5 6 7 |
class Calc: def Sqrt(a, b): return math.sqrt(a ** 2 + b ** 2) if __name__ == "__main__": c = Calc.Sqrt(30, 40) print(c) |
わかったかな??正解出来たら今回の項目は完璧だね!!