Python クラス

はじめに

「クラス」とは何か。例を挙げると「三四郎のアイフォン」も「ヒロのGALAXY」と表現される、「スマホ」というものがクラスに含まれます。あるモノをまとめて包含しているものが、クラスです。 「スマホ」にはメーカー、機種という属性があって、「画面を操作すれば電話をかけられる」とか「アプリを操作できる」というような操作をできるものとおおよそ決まっています。 こういった暗黙の決まり事のおかげで、「スマホを操転する方法」を知っている人なら「三四郎のアイフォンの操作方法」や「ヒロのGALAXYの操作方法」を個別に覚えることなくどちらをも操作することができるわけです。これがクラスを用いるメリットです。もし「スマホ」というクラスがなければ、ちがう機種のスマホを操作するたびにそのスマホの操作方法をいちいち学習しなれればいけないという面倒くささが生じます。 クラスに含まれている具体的なものを「インスタンス」と呼びます。さきほどの「スマホ」の例なら、「三四郎のアイフォン」はインスタンスですし、「ヒロのGALAXY」もインスタンス。オブジェクトは属性や操作などクラスで決められているものをすべて持つことになります。 ひとつのクラスに含まれるインスタンスは、複数個あっても問題ないです。

クラスを定義する

ではさっそくクラスを定義しましょう。pythonでのクラスをつくるための基本的な構文は、

です。インデントが必ず必要です。

初期化を行う__init()__メソッド

実際には、クラスの定義では以下のようにコードを記述します。

さて、「__init__()」とはクラス定義のための特別なメソッドでコンストラクタと呼ばれます。そのクラスを初めてつくるときの動作を記述します。また、「__init__()」の一番目の変数「self」も、特別な変数ですので、この「self」の語句のまま、入力してましょう。 記号のアンダーバーを2つ書いて、「__」とします。「init」の前後にアンダーバーが2つずつありますので注意してください。 クラス名を「Smartphone」としましょう。スマホの機種を、1番目の変数として、変数名を「model」としましょう。スマホの色を、2番目の変数として、変数名を「color」とします。 すると、クラスの構造の定義は、下記コードのようになります。

「self.model」には値が決まってない「model」を代入していますが、クラスの定義ではこのように記述してもエラーにはなりません。

インスタンスの定義と変数

三四郎のアイフォン(変数名は「sanshirophone」とします)が、アイフォン(”iphone”とします)、壁紙の色が緑((”green”とします)として、

sanshirophone = Smartphone("iphone", "green")

と記述します。 オブジェクトの持つ変数を参照するときは、

sanshirophone.model

のようにピリオドを使います。このようにクラスで定義されてオブジェクトがそれぞれの値を持つ変数をインスタンス変数と言います。

上記コードを実行すると、

と表示されます。

クラス変数

さて、スマホはカメラが2つついています。これは三四郎のスマホでもヒロのスマホでも、最近のモデルのスマホである限り変わりません。このようにインスタンスに共通でクラスとしての性質を持つ変数をクラス変数といいます。 クラス変数を定義するには、クラスのすぐ下に書きます。

クラス変数を参照するときも、インスタンス変数と同じ様にピリオドでつなげて表します。

メソッド

クラスにはインスタンスの持つ属性以外にも、共通の操作を定義できます。その操作をメソッドと呼びます。 メソッド定義の仕方は、関数を定義した時と同じようにクラスの中にdefで定義します。ただ関数の定義と違うのは第一変数を必ずselfとすることです。 スマホは壁紙を自由に変えることもできます。壁紙の色を変えるメソッドをchange_colorとして、変更後の色をnew_colorという引数として持つとしましょう。これを実装すると以下のようになります。

という処理が実行されるのです。

 

まとめ

いかがでしょう。クラスについてまとめてみました。初期化、インスタンス変数、クラス変数といった初めて見る単語が出てきますが、何回も繰り返すとしっくりくると思います。

初心者にもわかるオブジェクト指向

継承

連載目次

初心者にもわかるオブジェクト指向

クラス

継承

ポリモーフィズム

インスタンス変数の隠ぺい

オーバーライドと多重継承

クラスメソッド

名前空間

グローバル変数とローカル変数の使い方

クラス変数にメソッドからアクセスする場合

カプセル化、プロパティ、ゲッター、セッターについての解説