記事の内容
この記事では、Pythonのクラスの定義方法や使い方について説明していきたいと思います。
なお、このコードはPythonの3系で書かれています。
目次
クラス(class)とは何か?
クラスとは、データを管理する型であり、設計図でもあります。
そのため、クラス名は抽象的な名前になりがちです。
例えば、車を管理するクラスを作りたいとします。
その場合、クラス名は、「プリウス」「ベンツ」という具体的な名前にはなりません。
クラス名は、「Car」といった抽象的な名前をつけます。
なぜならば、繰り返しにはなりますが、クラスは設計図であり抽象的なものを表すからです。
インスタンス(オブジェクト)とは何か?
クラスは設計図なので、それを実際に動かすためには、クラスを組み立てて実体化させてやる必要があります。
その作業を「インスタンス化する」と言ったり、「オブジェクトを生成する」と呼んだりします。
クラスの定義方法
クラスを定義するためには、「class」というキーワードを使います。
クラス名の先頭は、常に大文字にして下さい。
具体的には、このように定義します。
空のクラスを実装する時は、「pass」というキーワードを使います。
pass
インスタンスの使い方
インスタンスを生成するためには、「クラス名()」という風にして、定義するだけです。
一つのクラスに対して、インスタンスは、いくつでも作成することができます。
インスタンスメソッドとインスタンス変数
クラスに「インスタンスメソッド」と「インスタンス変数」を定義する
今までは、クラスの定義方法とインスタンスの使い方について紹介しました。
ここでは、実際にクラスを使う方法を紹介します。
クラスには、インスタンスメソッドと、インスタンス変数という2つのモノを定義することができます。
インスタンスメソッドは、クラスの中に「def」というキーワードを使って定義します。
そして、インスタンスメソッドの引数には、「self」というキーワードを入れます。
インスタンス変数は、「self」というキーワードを使って定義します。
インスタンス変数は、クラスの中で共有される変数です。
「self」を付けない変数とのスコープの違いを意識すると、よりインスタンス変数の意義がわかるはずです。
この2つは、クラスからインスタンスを生成することで、使うことができるようになります。
「インスタンスメソッド」と「インスタンス変数」は、クラスのままでは使うことができません。
「__init__」というキーワードを使って、インスタンスに初期値を与える
「__init__」メソッドは、オブジェクトが生成される時に実行されるメソッドなので、インスタンス変数に初期値を設定することができます。
「__init__」メソッドのように、「オブジェクトが生成される時に実行されるメソッド」をコンストラクタと呼びます。
「__init__」メソッドを使って、先程のコードを綺麗に書いてみます。
コンストラクタを使うことで、インスタンスを生成したタイミングで、nameに値をセットできたことがわかります。
クラスメソッド
クラスには、クラスメソッドというものもあります。
クラスメソッドは、個々のインスタンスに含まれる必要がないデータを扱う時に使います。
例えば、Carクラスで言えば、車を作るメソッドは、インスタンスメソッドに含まれる必要がありません。
なぜならば、carインスタンスは、プリウスやベンツといった個々の車のデータを管理していて、「車を作る」という作業内容をcarインスタンスが持つ必要はないからです。
クラスメソッドは、メソッド名の前に「@classmethod」をつけることで定義することができます。
メソッドの引数には、「cls」を入れます。
クラスメソッドを使う場合は、インスタンス化をせずに使うことができます。
クラス変数
クラスの中には、クラス変数を定義することもできます。
クラス変数は「self」というキーワードをつけないで、クラスの直下に定義します。
先程、車を作る「create」メソッドがありましたが、車の製造台数を管理したい場合に、クラス変数を使います。
なぜならば、車の製造台数といった情報も、個々のインスタンスが持つ必要のない情報だからです。
今回は、車を2台作成した後で、3台目を作成しました。
その際にも、車の製造台数が保持されていることがわかるはずです。
クラスでデータを管理すると便利
「何で、クラスを使う必要があるのか?」「Dictionaryでもデータを管理できるのではないか?」という疑問を持つ方もいるかもしれません。
確かに、上記の規模のデータならば、Dictionaryでデータを管理することもできそうです。
ただし、Dictionaryはキーを追加したり削除をすることもできるので、脆くて壊れやすいプログラムになりがちです。
そのため、より堅牢で扱いやすいデータ型を作るために、Carクラスを作成するのが一般的です。
まとめ
この記事では、クラスとインスタンスに関することを説明しました。
クラスを理解することで、様々なコードを柔軟に書くことができるようになるはずです。
Good luck with your engineer life!
この記事が面白かった人は、こちらの記事も読んでみて下さい。
-
【Python入門】クラスの継承の使い方
目次1 クラスの継承2 オーバーライド3 まとめ クラスの継承 クラスの継承を試してみよう クラスの継承とは、既に定義済みのクラスやメソッドを再利用するようなイメージです。 クラスの継承をするためには、クラス名の()に親クラスの名前を代入し ...