【初学者向け】Python超入門⑪~クラス~

Python超入門
こんにちは、データ分析屋のやじろべえ(@yajirobe_papa)です。
Python超入門第十一回です。前回はPythonにおける関数について解説しました。
今回はクラスについて解説していきます。
多くの人がプログラミング学習を始めて一番つまずきやすい所だと思いますが、なるべくわかりやすく解説しますので、是非最後までご覧いただければと思います。
それでは早速やっていきしょう!

クラスとは

一言で表すと、「設計書」のようなものです。
前回の講座では、関数は機能のようなものと解説しました。
クラスは、データ(変数)と関数がひとまとまりになったイメージをしてもらえるとわかりやすいと思います。
また、クラス内にある変数と関数は言い方が変わり、変数は属性(アトリビュート)と言い、関数はメソッドと呼ばれます。
これだけだと、まだイメージしづらい部分もあると思いますので、クラスを”お掃除ロボット”に例えてみると次のようになります。
属性にはお掃除ロボットを作る上で必要な情報となります。例えば、サイズや吸引力、充電時間などですね。
しかし、属性だけで機能が無いとお掃除ロボットは動きませんね。そこで、メソッドを作ってあげて何かしらの機能を持たせてあげます。
いかがでしょう?少しはクラスについてイメージしやすくなったのではないでしょうか。
そしてもう一つ大事な考え方があります。それがインスタンス化です。
クラスを作っただけだと、設計書を作っただけに過ぎないのでこの段階では実体は存在していません。
ですので、クラスを使ってお掃除ロボットの実体を作ってあげる必要があります。
この実体を作ることを、インスタンス化すると言います。
そして、設計書がしっかりと作られていれば属性やメソッドを追加・変更するだけでお掃除ロボットが量産出来るようになります。
これがクラスの持つメリットの一つです。
それでは次からコードを確認しながら、クラスに慣れていきましょう。

クラスの使い方

Pythonではクラスを定義する際に、classを使います。
classの後にクラス名を記述します。また、クラス名は大文字で始めるのが慣習となっています。
そして、改行してインデントを空けてからクラスの内容本体を記述します。クラス本体は先に解説した通り、属性とメソッドを書きます。
それではコードで確認していきましょう。
今回はCleaningRobotというクラス名を作ります。そして、__init__というメソッドを定義します。これは初期化を行う特殊なメソッドで、インスタンス化をする際に必ず最初に呼び出されます。また、__init__はコンストラクタとも呼ばれます。
In [1]: class CleaningRobot:
            def __init__(self, size, suction_power, charging_time):
                self.size = size
                self.suction_power = suction_power
                self.charging_time = charging_time
__init__の丸括弧を見てみると第一引数にselfと指定されていますね。このselfというのはインスタンス自身を表すもので、クラス内でのメソッドはこのselfが必ず必要で、指定されていないとエラーが発生します。ちなみに、selfは予約語では無いので他の名前でも代用出来ますが、慣習的にselfを使います。
そして、__init__の中身を見てみると、size, suction_power, charging_timeといった情報が入ってることがわかります。(suction_powerは吸引力、charging_timeは充電時間という意味です。)
専門用語がたくさん出てきて少しわかりづらくなってきたかもしれませんが、要するに、
  • クラスを定義するときには初期化するための__init__メソッドを定義しておく
  • クラス内のメソッドの第一引数はselfを必ず指定する

とだけ覚えておけばまずは良いと思います。

 

ここまではクラスを定義しただけなので、実体(インスタンス)はまだ存在していません。つまり、まだ設計書を作っただけです
この設計書を元に実体(インスタンス)を作ってみます。
osouji_kunというインスタンスを作って、このお掃除ロボットが持つ情報として、size = L, suction_power=’strong’, charging_time=2.0という情報を与えます。
In [2]: osouji_kun = CleaningRobot("L", 'strong', 2.0)
はい、これでCleaningRobotという設計書からosouji_kunという実体(インスタンス)を作ることが出来ました。
osouji_kunの持つ情報は次のようにして見ることが出来ます。
In [3]: osouji_kun.size
Out [3]: 'L'

In [4]: osouji_kun.suction_power
Out [4]: 'strong'

In [5]: osouji_kun.charging_time
Out [5]: 2.0

 

では、次にosouji_kunに機能を持たせてみましょう。
今回搭載する機能は、「充電時間によって稼働時間をお知らせしてくれる機能」にしましょう。
クラスの中にこの機能をメソッドとして定義します。メソッド名はoperating_timeとします。
operating_timeメソッドは充電時間が2.0以上であれば’稼働時間はおよそ1時間です’と出力し、そうでなければ’稼働時間は0.5時間です’と条件分岐して出力するようにします。
コードは次のようになります。operating_timeメソッドにも第一引数にselfを入れることを忘れずにしましょう。
In [6]: class CleaningRobot:
              def __init__(self, size, suction_power, charging_time):
                  self.size = size
                  self.suction_power = suction_power
                  self.charging_time = charging_time

              def operating_time(self, charging_time):
                  if charging_time >= 2.0:
                     print('稼働時間はおよそ1時間です')
                  else:
                     print('稼働時間0.5時間です')
クラス(設計書)に機能を付け加えたので、再度osouji_kunの実体(インスタンス)作ってあげる必要があります。
In [7]: osouji_kun = CleaningRobot("L", 'strong', 2.0)
そして、いよいよ稼働時間お知らせ機能を作動させてみます。operating_timeメソッドを呼び出して引数に1.5と入れてみましょう。
これで、charging_timeに1.5が代入された形となります。結果を見てみると、ちゃんと条件通りの結果になっていますね。
In [8]: osouji_kun.operating_time(1.5)
Out [8]: 稼働時間は0.5時間です。

まとめ

今回はPythonにおけるクラスについて解説し使い方について解説しました!
クラスはなかなか理解しづらい部分もあると思いますが、使っていくうちにだんだんとわかってくると思いますので、怯えずにどんどん使っていきましょう!
大規模な開発になってくるとクラスは必ず必要になります。最初から完璧には理解しようとはせず、習うより慣れろの気持ちでやっていきましょう。
次回はPythonにおけるテキストファイルの読み込みについて記事にします。
<追記>
第十二回記事更新しました!
それではお疲れ様でした。
タイトルとURLをコピーしました