【入門者向け】クラスの概要とPythonにおける実装|Python入門 #7

f:id:lib-arts:20190804170008p:plain

#1ではPythonを用いたFizzBuzzのコーディングについてまとめました。

入門者の方に読んでみていただいたところ、少し難しかったようなので、#2以降では#1で触れた基本文法をそれぞれもう少し丁寧に解説を行なっていきます。基本的には下記のPythonのドキュメントのチュートリアルなどを元にして解説していきます。

Python チュートリアル — Python 3.7.4 ドキュメント
#2ではPythonにおける四則演算・文字列について、#3ではリスト・タプル・辞書について、#4ではPythonの制御構文について、#5ではPythonの入出力に関して、#6ではPythonの関数の実装について取り扱いました。

【入門者向け】Pythonの基礎文法① 四則演算・文字列|Python入門 #2 - lib-arts’s diary

【入門者向け】Pythonの基礎文法② リスト・タプル・辞書|Python入門 #3 - lib-arts’s diary

【入門者向け】Pythonの基礎文法③ 制御構文(if、for)|Python入門 #4 - lib-arts’s diary

【入門者向け】Pythonの入出力の実装|Python入門 #5 - lib-arts’s diary

#7ではSection9を中心にPythonにおけるクラスの実装について取り扱います。

9. クラス — Python 3.7.4 ドキュメント

以下目次になります。
1. クラスの概要
2. クラス定義の構文とクラスオブジェクト(9.3.1、9.3.2)
3. まとめ


1. クラスの概要
1節ではクラスの概要についてまとめます。関数とは違い、クラスはちょっとわかりにくい考え方なので、概念の補足から入ります。

f:id:lib-arts:20190829214031p:plain

クラス (コンピュータ) - Wikipedia

上記はWikipediaの解説なのですが、クラス、オブジェクト、インスタンスなどと難しい言葉が並んでいます。難しく解説するとわけがわからなくなるので、以下ざっくりとした直感的な解説のみとし、具体的には実装を見ながら確認していくという形で話を進めていければと思います。
まず、クラスとインスタンスに関してですが、それぞれ設計図と組み上がった物体と考えます。具体的に車を想定するなら、クラスは車の設計図、インスタンスは実際に製造された車となります。設計図を用意することで、同じインスタンスを生成することができ、再現性が取れます。プログラミングにおいては、車とは違い原材料などがないので再現性が取れれば再利用できたも同然となります。従って、一度クラスを実装しておけば、関数と同様に使い回すことができるようになります。
また、クラス、インスタンスは関数と比較して何が違うかですが、関数は単に処理手順のみを記述しているのに対し、クラスから生成されるインスタンスはデータと処理手順の二つを持っているので、関数よりもより高機能な振る舞いをすることができます。

これ以上見ていくと大変なので、クラスは設計図、インスタンスは設計図から作られたデータと処理手順を持つもので、関数よりもより高機能な実装が可能になるとだけ把握した上で次に進みましょう(実際にコードを動かしながらでないとイメージがつかめないと思います)。


2. クラス定義の構文とクラスオブジェクト(9.3.1、9.3.2)
2節ではクラスの定義にあたって構文と実装例を見ていきます。まずは、9.3.1よりクラス定義の構文を見ていきます。

f:id:lib-arts:20190829215620p:plain

上記がクラス定義の構文です。一旦"class ClassName"でclassを定義するとだけ抑えてください。これを実際に実装した例が下記になります。

f:id:lib-arts:20190829220047p:plain

上記では実際にMyClassというクラスにデータのiとメソッドのfを実装しています。見ているだけではわかりづらいので、実際に動かしてみます。

class Complex:
    def __init__(self, realpart, imagpart):
        self.r = realpart
        self.i = imagpart

x = Complex(3.0, -4.5)
x.r, x.i

上記を実際に動かすと下記のような結果が得られます。

f:id:lib-arts:20190829225155p:plain

上記ではComplexというクラスを定義し、rとiという形で内部に変数を持ちます。Complexは複素数という意味で、rは実部(Real part)、iは虚部(Imaginary part)をそれぞれ意味しています。Complex(3.0, -4.5)で複素数インスタンスを生成し、xに代入しています。最終文で、x.rとx.iという形式でそれぞれの値を取り出しています。生成したインスタンスの値はこのようにすることで確認することができます。

上記で、クラス定義の構文とクラスオブジェクトについては確認できたので2節はここまでとします。


3. まとめ
#7ではクラスの概要とPythonにおける実装について取り扱いました。
#8では少々難しいですがクラスの継承とオブジェクト指向について見ていければと思います。