こんにちは,shun(@datasciencemore)です!!
今回はクラスについてです.
クラスは最初学習する場合,かなり難しい概念です.
完璧に理解する必要はないので,まずは概要を抑えましょう!
0.クラスってなに??
クラスはデータと処理をまとめた機能のことだよ!!
クラスを使用することで,同じような処理をきれいに書くことができるんだ!!
またまたよくわからないですね笑
前回,関数について学習しました.
クラスと関数は結構似ています.
関数とは端的に言うと,入力と出力がある処理のことでしたね.
クラスは処理だけではなく,データもまとめた機能のことです.
関数と同様,クラスもこれだけだとイメージがしづらいと思うので具体例を考えて,クラスの理解を深めましょう.
具体例として,とあるお店のお客さんの来客数について考えてみましょう.
とあるお店として,ケーキ屋さんとハンバーガーショップがあるとします.
出来ればイメージを深めるため,何かしら具体的なお店を想像してください.
例えば
ケーキ屋さん ⇒ コージーコーナー
ハンバーガーショップ ⇒ マクドナルド
などなど...
別にどのようなお店でもいいですが,具体的なほうがイメージがしやすいです!
それぞれのお店には,データとして1日あたりの男女別の来客数がわかるものとします.
それぞれのお店の一日あたりの男女合わせた来客数が何人になるか考えましょう.
クラスを使用しないで書くとこんな感じになります.
1 2 3 4 5 6 7 8 9 |
# ケーキ屋 cake_male = 50 cake_female = 300 cake_total = cake_male + cake_female # ハンバーガーショップ burger_male = 500 burger_female = 30 burger_total = burger_male + burger_female |
この例だと2つのお店しかないのでそこまで大変ではありませんが,お店の数が増えてくると書くのがかなり大変になってきます...
こういうときに使用するのがクラスです.
クラスを使用するとこのような同じような処理をスッキリ書くことができます
先ほどのコードと同じ内容をクラスを使用して書くとこのようになります.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
class Shop: # コンストラクター def __init__(self, male, female): # インスタンス変数 self.male = male self.female = female # メソッド def total(self): return(self.male + self.female) # インスタンス cake = Shop(male = 50, female = 300) burger = Shop(male = 500, female = 30) |
クラスを使用したいない場合とクラスを使用した場合を比較してみましょう.
左側がクラスを使用していない場合,右側がクラスを使用した場合となります.
一見,左のほうがコードが短いので,左のほうが楽に書ける気がします.
今回の例のようにお店が2個しかない場合はクラスを使用しなくても問題ありません.
ただ,場合によってはお店を100個,1000個と考える必要があることもあります.
そのようなときは,右側のクラスを使用したほうが便利です.
なぜかというと,一旦,クラスの定義をしてしまえば,あとは1行,書き加えるだけでお店のデータと処理を使用できるようになるからです.
1.クラスの作成方法
それではクラスの作成方法を見ていきましょう.
クラスはよく設計図に例えられます.
設計図さえできていればあとはそれに従えば,設計物が作成できるからです.
こちらの図がクラスを作成する過程のイメージとなります.
今回の場合は,ケーキ屋さんとハンバーガーショップを考えているので,その元となるクラスをShopとしましょう.
そして,Shopに必要な情報は,男女の人数であるデータとその合計を計算する処理機能です.
Pythonのクラスでは,そのデータのことをインスタンス変数,処理のことをメソッドと呼びます.
クラスを作成するときは,クラス名,インスタンス変数,メソッドの順番に書いていきます.
具体的な書き方はこのようになります.
インスタンス変数を設定するときは,__init__の中にインスタンス変数の情報を記載します.
この__init__の部分をコンストラクターと呼びます.
そして,メソッドはコンストラクターの下に書きます.
コンストラクターとメソッドの部分にselfというよくわからないものがあります.
これはあまり深く考えず,Pythonのルールとしてselfと書くと覚えちゃいましょう.
インスタンス変数とメソッドを書けば,クラスの作成が終了です.
クラスの作成の後にやることがインスタンスの作成です.
クラスは設計図のことでした.
設計図に従えば,設計物が完成します.
クラスもそれと同様,クラス設計時に指定したデータを与えてあげれば,それに該当する設計物が作成されます.
Pythonの世界では,このクラスから作成した設計物のことをインスタンスと呼んでいます.
今回の例では,ケーキ屋さんを示すcakeとハンバーガーショップを示すburgerがインスタンスということになります.
コードとイメージの対応をよく確認してください.
同じ色が同じ概念を表しています.
初めて勉強する場合,クラスはとてもややこしく,理解しづらい概念だと思います.
完璧に理解しなくてもいいので,まずは概要を理解して積極的に使用するようにしましょう.
そうすれば徐々に慣れていくと思います.
2.関数やクラスのオススメ作成方法
前回,関数について,そして今回,クラスについて学習してきました.
慣れないうちは関数もクラスも作成することが難しいと思います.
そこで関数やクラスを上手に作成するためのオススメの方法を説明したいと思います.
それは
まずは関数やクラスを使用しないでコーディングして,長くなったら関数化,もしくはクラス化を検討する!!
という方法です.
要は,いきなり関数やクラスを作成しようとしないってことですね.
参考書や実際のプログラムは大体,関数やクラスがいきなり定義されています.
これだけ見ると最初から関数やクラスを書かないといけないように見えますが,実際はいきなり書いているわけではなく,試行錯誤の末,関数やクラスを作成している場合が多いです.
少なくとも僕はそうです笑
なので,そもそも最初から関数やクラスを作成する必要なんてないのです.
関数やクラスを使用しないでコーディングしていって,コードが長くなっていったときにはじめて関数化,クラス化を検討しましょう.
関数やクラスは大事なテクニックですが,使用しても使用しなくても結果は同じなので,無理せず気楽に使用していきましょう.
Pythonにたくさん触れていると自然と関数化,クラス化したほうが良さそうだなというところに気づくものです.
そのように感じたら関数化,クラス化をするくらいの気楽な気持ちでいいと思います.
一番良くないのは,関数やクラスの概念が難しいからといってPython自体の学習をあきらめてしまうことです.
せっかくここまで学習してあきらめるのは非常にもったいないですので,少しずつでも学習を継続していきましょう!
まとめ
今回はクラスについてやってきました.
クラスは処理とデータをまとめた機能のことです.
クラスを作成することで同じような処理をきれいに書くことができます.
クラスは慣れないうちは難しい概念かも知れないです.
ただ使用していくと徐々に慣れていくので,もし苦手意識があってもそんなに心配する必要がありません.
気楽な気持ちで使用していきましょう!!
これにてPython編は終了になります.
次回からいよいよ本講座のメインテーマのパッケージ編に入っていきます.
それではお疲れさまでした!!
次回
-
【numpy】ベクトル【数値計算】
こんにちは,shun(@datasciencemore)です!! 今回は,ベクトルについて説明していきます. pythonでは,numpyを使用するとベクトル計算ができるようになります. 目次1.ベク ...
続きを見る