[Python] クラスやインスタンス、オブジェクト指向が理解できない人、僕はコレでようやくスッキリしました。
前書き
Python を学習する上でクラスの理解が一つの肝だと感じていました。
- def で関数書いていけばいいんじゃないの?
- 関数とクラスは何が違うの?
- 何が嬉しくてクラスを使うの?
等の疑問をずーーーっと抱えていました。
グーグルで検索すればたくさんの人がブログや Qiita に解説を書いていますが、僕はさっぱりわからなかったです。なんでこんなにもたくさんの人が解説しておきながら理解できるコンテンツがないんだ?とずっと思ってました。
そんな僕がすっきりと理解できたのがプロゲート (progate) のコンテンツでした。
だから、クラスがわからない人はプロゲートで Python を学習することを強くおススメします。
クラスについてスッキリわかったこと
たとえば下記の違いについて
- クラス
- インスタンス
- インスタンス変数
- インスタンスメソッド
- クラス変数
- def __init__(self)
↑ ここの理解が進まない人は要チェックです。
あと、ついでにわかって嬉しかったことは
- import なんとか
- from なんとか import なんとか
の違いです。
更に言うと、長年抱えていた疑問である「結局オブジェクト指向って何ですか?」に対する答えもわかりました。
具体的に学習すべきレッスンはこれ!
プロゲートの Python 学習コース 4 「クラスを学ぼう」です。
月額課金で 1,000 円くらい (1 ヶ月) 必要かもしれませんが、Python のクラスやインスタンス、オブジェクト指向をすっきり理解するならコレです!!
【追記】実はクラスについての理解は浅いものだったのかもしれない説
この記事を書いて 2 週間ほど経過しましたが、少し追記しておきます。
クラスについてスッキリと理解できたと書いていましたが、何事も奥が深いものです。
僕がクラスについてわかったことというのはごく一部だったのかもしれません。しかし 2 週間前にわかった!と感じたのも事実。では僕は何がわかったのでしょうか?それをできる限り明文化すると、
- 「class なになに」と書く理由
だったのではと思います。
コードの構造上のメリットといいますか、クラスを使うことで「def なになに」と書いて作る関数だけでは達成できない柔軟性・可読性・拡張性を手に入れることができる。
この点の理解が進んだと言って良いかと思います。
今はまた違う部分で苦戦している箇所があり、そこが課題となっています。具体的には、print 関数で変数の中身を表示させようとしたときに、
<__main__.Node object at 0x10989e910>
のように表示され、なんじゃこれ!?となっています。これは HackerRank の学習中に見つかった課題です。
- これを理解するために、何を理解する必要があるのか?
- これが理解できていないのは、何が理解できていないからなのか?
Python の原理原則といいますか、ちゃんとしっかり理解できていないがためにここでつまづいてるんだと思うので、頑張って勉強続けます。