Python学習【365日チャレンジ!】76日目のマスターU(@Udemy11)です。
モジュールとパッケージのセクションを終了して、次は、オブジェクトとクラスのセクションに入っていきます。
内容がどんどん難しくなっていくので、若干、頭の中がオーバーヒートしています。
それでも全講座の25%程度しか進んでいないので、まだまだ先は長く、ほんのちょっとだけ、挫折しそうになります。
Web上でPythonistaについて日本語で書かれたトピックがなかなか見つからないので、勇気を出して、Pythonistaのフォーラムに登録して質問したところ、termcolor
がPythonistaで使えるか知りたかっただけなのに、めっちゃ親切にコンソールに3色の出力ができる長いコードを書いてくれたので、ちょっと戸惑ってしまいました。
このフォーラムで英語もちょびちょび勉強しつつ、Pythonもしっかり学習していこうと思います。
それではPython学習に入りましょう
昨日の復習
昨日は、__name__
と__main__
について学習しました。
実行しているファイルの__name__
が__main__
になり、それ以外の読み込まれたファイルは階層+ファイル名になりました。
同じ階層に置いた2つのファイルを片方が読み込んだ場合は、実行しているファイルが__main__
で、読み込まれたほうはファイル名になります。
読み込まれた段階で実行したくない場合は、if __name__ == '__main__':
という一文を付けて、読み込まれた時点で実行されないような記述が必要でしたね。
utils.py
def say_word():
print('Good morning!')
lesson.py
import utils
def main():
utils.say_word()
if __name__ == '__main__':
main()
メインのファイルだったとしても、誰かに読み込まれる可能性があるのなら、main()
関数を使って、__name__
が__main__
の場合にのみmain()
を実行するという書き方にする必要がありました。
詳細についてはこちらの記事をごらんください。
それでは、今日の内容にはいりましょう。
クラス
クラスは、オブジェクトのひとつなのですが、簡単に考えると、いくつかのメソッド(関数)をまとめたものがクラスになります。
Person
というオブジェクトの中に、run
やcry
やsing
といったメソッドを付け加えている感じです。
class Person(object):
def run(self):
print('I am running')
person = Person()
person.run()
出力結果
I am running
Python3では、class
の定義に(object)
を記載する必要はなく、class Person:
でもclass Person():
でも問題はありません。
Python2のときに、新しくなったPython3のclass
の機能を使えるということで、(object)
を記載したほうがいいということと、後で学習する【クラスの継承】のベースクラスとして扱うという意味から(object)
を使うのが暗黙のルールになっているとのことでした。
とはいえ、Pythonの公式ドキュメントの【クラス】のチュートリアルには、Perenthesesの丸括弧も使っていないし、Web上でPythonの解説をしているサイトでもあまり使っていないので、使わなくてもいいかなとおもいつつ、酒井さんの講座ではobject
を記述しているので、とりあえずはobject
を記述していこうと思います。
selfってなに?
次に気になるの関数(メソッド)の(self)
だと思います。
これは、自分自身を指定するもので、明日、詳しく学習するのですが、今回はとりあえず、クラスのメソッドには必ず必要なものとして理解しておきましょう。
classは必要?
class
を解説するとなると、どうしてもコードがシンプルで簡単なものになるので、関数があるのに、それで十分じゃないのか?と思っちゃいます。
このことを自分なりに咀嚼(そしゃく)して考えると、class
は、一つのファイルみたいなもので、Person.py
の中にメソッド(関数)を書いているのと対して変わらないような気がします。
もちろん、厳密には大きな違いがあるのでclass
というものがあるわけですが、実行時の記述を見ると、person.run()
になるので、言ってみれば、実行するファイルからperson.py
をimport
していて、そのperson.py
の中身には、I am running
と出力されるrun
関数が定義されているのと同じです。
といっても、class
にしかできないこともあるわけで、それは明日の学習でわかると思います。
頭が溶けちゃう
これまでにも何度かお伝えしていますが、今は一つ一つのパーツの使い方を学習しているところです。
なので、例がとてもシンプルで、おもわず
それって別のやり方でもできるよね
なんて思っちゃうこともあります。
しかし、実際のプログラムを書いていく上で、コードを短くできたり、コードがきれいに書けたりするから存在しているので、今はしっかりと学習しているパーツを拾い集めていきましょう。
とはいえ、同じようなものばかりで、ちょっとこんがらがって頭の中が溶けちゃいそうなので、あわてず、一息つきながら、学習していきたいと思います。
それでは、明日もGood Python!