こんにちは。Toruです。
今回は、pythonのclass文について誰でも感覚的に理解できるように説明していきたいと思います。このclass文、pythonを使ってプログラミングをしているとよく見ますが、selfとか出てくるし処理内容とかよくわからないですよね。私も最近classについて勉強し直したので忘れないようにここにまとめたいと思います。
■参考にした本:みんなのPython 第4版 [柴田淳]
それではいきましょう!
そもそもclassってなんだ?
classってなんだ?と聞かれて説明するのは時間もかかるし理解するのも大変だと思います。なのでここでは、関数をいろいろ持っている入れ物程度の認識で大丈夫だと思います。classという入れ物の中に様々な処理をしてくれる道具(def文で定義されます)が入っている、といった感じです。
じゃあその道具はどうやって取り出すの?ってなりますよね。道具の取り出し方はめちゃくちゃ簡単で、入れ物の名前(class名)を「Iremono」、道具(def文の内容)を「dougu」とした時、以下のようにして取り出すことができます。
1 2 | iremono = Iremono() iremono.dougu() |
このようになります。ちなみにですが、クラス名を定義するときは普通、頭文字は大文字で定義します。
classの定義の仕方

それでは実際にclassを定義してみましょう。先ほども述べたように、classは道具の入っている入れ物とイメージすると理解しやすいので、ここではKouguBako(工具箱)をクラス名として定義します。そして、その中にはTonkachi(トンカチ)というインスタンス(道具)を定義します。また、ここで出てきたインスタンスというのはclass文内に定義されるdef文のことです。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | # 工具箱の中身 class KouguBako: # init=初期設定 # self.kugiとすることでkugiがclass内で使えるようになります。 # 詳細に書くと、引数にselfを入れることでインスタンスを設定することが出来る # selfについてここではまだ深く考えないこと。selfは「普通のdef文(関数)と # class内でのdef文(インスタンス)を判別するために使う」と覚えておけばOK! def __init__(self, kugi): # インスタンスにアトリビュートを追加する。 # アトリビュートとはここでいう「kugi」 """ 処理内容 """ # 工具箱の中にあるTonkachiメソット # 読み出されたときの処理内容 def Tonkachi(self): """ 処理内容 """ |
こんな感じです。見てもわかるようにclass内の道具はいくらでも増やすことができます。ここまで来ればclassも同じクラスの奴みたいな感じで怖さがなくなってきたかと思います。(学校のクラスとかけてみましたがどうですか?やかましかったらごめんなさい。)
classの具体例から感覚を掴む
それでは大体の形が見えてきたので、もっと具体的な例を使って説明していきましょう。
①工具箱からトンカチを取り出そう
先ほど定義したclass文「KouguBako」の中から道具「Tonkachi」を取り出します。そしてそのTonkachiの処理内容もついでに書きます。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 | # 工具箱の中身 class KouguBako: # init=初期設定 # self.kugiとすることでkugiがclass内で使えるようになります。 # 詳細に書くと、引数にselfを入れることでインスタンスを設定することが出来る # selfについてここではまだ深く考えないこと。selfは「普通のdef文(関数)と # class内でのdef文(インスタンス)を判別するために使う」と覚えておけばOK! def __init__(self, kugi): # インスタンスにアトリビュートを追加する。 # アトリビュートとはここでいう「kugi」 self.kugi = kugi # 工具箱の中にあるTonkachiメソット # 読み出されたときの処理内容 def Tonkachi(self): self.kugi += 1 return self.kugi kugi = 0 n = 0 # 工具箱の中から道具を取り出します。 kougubako = KouguBako(kugi) Kugi = kougubako.Tonkachi() |
こんな感じになりました。ここでちょくちょく出てくる「Kugi」というのは次に出てきます。
②取り出したトンカチで釘を5回打ち込む
それでは実際に動かしましょう。
今、目の前に釘と板があります。釘はこの板に5回打ち込むと完全に埋まります。これをpythonでプログラムを書いていきます。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 | # 工具箱の中身 class KouguBako: # init=初期設定 # self.kugiとすることでkugiがclass内で使えるようになります。 # 詳細に書くと、引数にselfを入れることでインスタンスを設定することが出来る # selfについてここではまだ深く考えないこと。selfは「普通のdef文(関数)と # class内でのdef文(インスタンス)を判別するために使う」と覚えておけばOK! def __init__(self, kugi): # インスタンスにアトリビュートを追加する。 # アトリビュートとはここでいう「kugi」 self.kugi = kugi # 工具箱の中にあるTonkachiメソット # 読み出されたときの処理内容 def Tonkachi(self): self.kugi += 1 return self.kugi kugi = 0 n = 0 kougubako = KouguBako(kugi) for n in range(10): # 工具箱(KouguBako)から道具(Tonkachi)を取り出す。 kugi = kougubako.Tonkachi() print("for文内:現在", n + 1, "回目", "現在釘を打った回数:", kugi, "回目\n") if kugi == 5: print("finish!") break |
軽く説明すると、トンカチは10回だけ叩けるとします。(24行目)
工具箱から取り出したトンカチで5回釘を叩くと終わります。(31行目以降)
たったこれだけです。理解しやすいようにめっちゃシンプルにしました。
注目して欲しいのは27行目のトンカチを取り出す部分。 kougubako.Tonkachi() のところでclass内にあるTonkachiの処理をします。ここでは入力された値に1を足して返すだけです。
そしてこれを実行すると以下のような結果が返ってきます。
1 2 3 4 5 6 7 8 9 10 11 | for文内:現在 1 回目 現在釘を打った回数: 1 回目 for文内:現在 2 回目 現在釘を打った回数: 2 回目 for文内:現在 3 回目 現在釘を打った回数: 3 回目 for文内:現在 4 回目 現在釘を打った回数: 4 回目 for文内:現在 5 回目 現在釘を打った回数: 5 回目 finish! |
最後に
今回はpythonのclass文について、感覚で理解できるように簡単に説明しました。本当にclass文の触りの部分ですのでclassを完全に理解したい人には不向きの内容だったかもしれません。
私もpythonを触り始めて2年しか経っていないのでわからないことだらけです。これからもclass文についてもっと掘り下げていきたいと思います。そしたらその都度記事を更新しますね♪