Python クラスの定義

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というオブジェクトの中に、runcrysingといったメソッドを付け加えている感じです。

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.pyimportしていて、そのperson.pyの中身には、I am runningと出力されるrun関数が定義されているのと同じです。

といっても、classにしかできないこともあるわけで、それは明日の学習でわかると思います。

頭が溶けちゃう

これまでにも何度かお伝えしていますが、今は一つ一つのパーツの使い方を学習しているところです。

なので、例がとてもシンプルで、おもわず

それって別のやり方でもできるよね

なんて思っちゃうこともあります。

しかし、実際のプログラムを書いていく上で、コードを短くできたり、コードがきれいに書けたりするから存在しているので、今はしっかりと学習しているパーツを拾い集めていきましょう。

とはいえ、同じようなものばかりで、ちょっとこんがらがって頭の中が溶けちゃいそうなので、あわてず、一息つきながら、学習していきたいと思います。

それでは、明日もGood Python!