今回は、Python での「クラス」の使い方をご紹介します。
クラスは、仕事を部署で分担することに似ています。
何か1つの仕事を完成させるために
- 部署Aでは、商品の市場調査
- 部署Bでは、商品の製造
- 部署Bでは、商品のパッケージデザイン
- ・・・
のように、それぞれ役割分担して行うとやりやすいですよね。
プログラミングでも同じで、
ある1つの大きなことを成し遂げたいとします。
その時、大きいことをより小さいことに分解して、それぞれ別々に処理する
ということを考えると便利なことが多いです。
このそれぞれの処理を
「クラス」の「メソッド」
という形で書くことができます。
プログラミングで、クラスはよく使いますので、学んでおいて損はありません。
ただし、もしあなたがプログラミングの超初心者なら、
とりあえずクラスは飛ばしても全然オッケーです。
クラスは、使わなくても大抵の処理はプログラミングできるからです。
じゃあ、なぜクラスを学ぶの?ってとこですが、
クラスを理解するメリットには、
- プログラムを、よりわかりやすくできる
- 再利用しやすくできる
- ある程度の規模のプログラムを読めるようになる
といったものがあります。
なので、初心者の方でも、ぜひクラスを学んで、
Python力の幅を広げてもらえたらなと思います。
そこで本記事では、Python クラスのプログラミング について
- クラス(class)とは?
- クラスの定義、書き方、メソッドとは?
- クラスの使い方、サンプルコード、具体例
など、クラスの基本知識について、サクッとご紹介します。
【Python 文法 独学】Python の「クラス(class)」とは?クラスの定義、書き方、メソッドとは?クラスの使い方、サンプルコードや具体例など、サクッとまとめました【Python 学習 初心者】
Python クラス(class)とは
「クラス」とは、
関連性の高いデータと手順を
1つのグループをまとめてプログラミングするためのルールです。
オブジェクト指向の考え方を活かしたプログラミングになります。
オブジェクト指向ってなに?って方はこちらの記事をどうぞ↓
『【Python 文法 独学】Python 「オブジェクト指向」とは?「オブジェクト」とは?などもサクッとまとめました【Python 学習 初心者】』
と言っても、抽象的だとわかりにくいと思います。
具体例で説明しますね。
クラス(class)の書き方
具体例として、以下のようなデータと手順をプログラミングしたいとします。
グループ:
データ:[りんご、みかん、メロン]
手順・方法:【食べる、皮をむく、育てる】
このデータは全部「果物」なので、まとめて、
クラス名「果物」を定義してみます。
(データの共通点から抽象度を上げた名前にしています)
実際のPython クラスの定義は、以下のような感じです
class 果物:
def 食べる(りんご):
実際の処理
def 皮をむく(みかん):
実際の処理
def 育てる(メロン):
実際の処理
最初に「class」 と書いて、右横にクラス名を書きます。
クラス名の横には「:(コロン)」を書きます。
すると、このようになります↓
class 果物:
次の行は、インデントした後で、
「def」と書いて、その右横にメソッドの名前を書きます。
さらにメソッド名の右横に
「( メソッドに与える変数 )」を書きます。
「:」を書いてその行を終わります。
すると、このようになります↓
def 食べる(りんご):
最後に、「def ブロック」の中に、
メソッドの処理の具体的な手順のプログラムを書きます。
他のメソッドがあるなら、同じように書いていきます。
ただし、「def」のインデントの位置を揃えるようにしてください。
(Pythonではインデントの位置が変わると意味が変わってしまうからです)
メソッドを書き終えたらクラスのプログラムは終了です。
クラスの記述にはメソッドがポイントだということがわかってもらえたかと思います。
そこでクラスのメソッドについて、もう少し詳しく解説したいと思います。
Python クラス(class)のメソッドとは
「メソッド」とは、クラスの中で定義された、手順や方法などの処理方法のことです。
クラスのメソッドは「def」を使って定義します。
なので、上のサンプルを見ると、
果物のクラスのメソッドには、defの右横を見て、
- 食べる
- 皮をむく
- 育てる
があることがわかります。
ちなみに、「def」って、関数で使わなかったっけ?
と思われた方、その通りです。
クラスの中で、関数のように記述をすれば、
メソッドが出来上がるというわけです。
「def」を使った関数ってどんなんだっけ?という方はこちらで解説していますのでどうぞ↓
というわけで、ここまでで、
クラスの書き方のイメージ
- クラスのポイントは、メソッドを意識するといい
- メソッドは関数のように書けばいい
をご紹介しました。
ではここからは、クラスの定義について、
サンプルコードとともに具体例で説明しますね。
Python クラス(class)の定義の具体例・サンプルコード
ここでは、
クラス「ある数字を与えると、2倍の数字を返す」
を作成したいと思います。
- 考え方の流れ
- 具体的なサンプルコード
の順に示したいと思います。
1、考え方の流れ
(1-1), クラス名
ここではクラス名は、数字を2倍するので、
「NumDouble」にします。
すると、クラスの1行目は
class NumDouble:
と書けます。
(1-2), メソッドの記述
今回必要となるメソッドは、
「入力した値を2倍にして出力」
というものです。
これを記述すればいいのですが、
クラスを書く時には、1つ覚えておくことがあります。
(1-2-1), クラスの初期化
クラスの定義では、まず必ずこれを書きます。
def __init__(self):
処理
このブロックは、プログラムがクラスを読み込む時に必ず実行される部分になります。
なので、クラスで初期化する必要がある場合には、
この def __init__(self): のブロック内に書くようにします。
(1-2-2), クラスの「初期化」はどんなとき使うの
- 初期化ってどんな時に使うの?
と思われるかもしれません。
初期化の例としては、
クラスの「属性(ぞくせい)」に値を代入しておいたりします。
(1-2-3), クラスの「属性」とは
- 属性とは、クラスの内容を表すようなもの
のことです。
どんなものが属性になるかは、クラスごとに違います。
この例では、2倍した値を出力するクラスを考えているので、
クラスの状態(内容)は、保持している値になります。
なので、その保持している値のことを、このクラスの属性と言うことができます。
(1-2-4), クラスの初期化:再訪
話を初期化の例に戻しますね。
例えば、value という属性の初期化を行うなら、
def __init__(self):
self.value = 0
のように、self. を書いて、その右横に属性名value を書きます。
そして初期化したい値(今回は0)を代入します。
これで、NumDouble クラスの属性 value は、
読み込まれる時に、0に初期化されます。
いきなり「self」を使う、と言われても、
なんで使うんだろ?
と思われるかと思います。
なのでサクッと self の意味を説明しますね。
クラス内で使う「self」とは?
英語では「self」は「自分自身」という意味です。
クラスでも同じようなイメージで、
クラスでの「self」は「クラス自身」という意味になります。
なので、「self.value」と書くと、
- そのクラス自身の持つ属性である value
という意味になります。
(1-3), メソッドの記述:再訪
これまでの内容をまとめると、
クラスの中で属性を使いたい時には、
- 属性の先頭に「self.」をつければいい
と覚えておけばいいことがわかりました。
今回の具体例で考えてみます。
必要となるメソッドは、
「入力した値を2倍にして出力」
です。
2倍にするメソッドなので、名前を「double」にします。
2倍にするメソッドは、以下のように書けます。
def double( self, num ):
self.value = num*2
メソッド名 double の右横の( )には、まず「self」を書きます。
次に、値を受け取るための変数の名前(今回は)「num」と書きました。
次の行で、メソッド内の処理では、numを2倍して、
属性 value に代入しています。
では以上の内容を、具体的なコードとしてまとめます↓
クラス(class)の定義のサンプルコード
クラス(NumDouble)は、2つのメソッドを定義しています。
- 必ず必要なメソッド( def __init__(self) )
- 値を2倍にするメソッド( def double(self, num) )
これで、このクラスを使う準備が整いました。
ここからはクラスの使い方を説明します。
Python クラスの使い方
クラスを使うには、
- クラスのオブジェクトを生成する
必要があります。
生成したオブジェクトを通じて、クラスを活用します。
(1-4), クラスのオブジェクト生成
(1-4-1), クラスオブジェクトのポイント1
クラスのオブジェクトを生成するには、
- 別の変数に代入
すればオッケーです。
number = NumDouble( )
「クラス名( )」を変数に代入すればいいわけです。
この number がNumBouble( )クラスから生成したオブジェクトになります。
numberを使うことで、クラスのメソッドを活用できます。
(1-4-2), クラスオブジェクトの生成のポイント2
クラスのオブジェクトを生成するときには、
「 __init__ メソッド」の初期化の部分が実行されます。
Python クラスのメソッドの使い方
クラスのオブジェクトができたら、
そのオブジェクトを使って、
クラスのメソッドを実行することができます。
(1-5), クラスオブジェクト
(1-5-1), メソッドの実行
上で生成したクラスオブジェクト number は、
与えられた数字を2倍にするメソッドdoubleを持っています。
なので、
number. double(3)
と書くと、この1行で、
クラス「NumDouble」のオブジェクト「number」について、
メソッド「double」に3を入力として与え、
「double」が実行されて、
3が2倍され、クラスの属性 value に結果6が代入されます。
このように、メソッドを使うには、
「クラスオブジェクト名. メソッド名」
という書き方をします。
(1-5-2), 属性の表示
では、本当に2倍されているかを確かめてみます。
クラスの属性は value としていたので、
number. value
と書けばその値が表示されます。
では本当にそうか、具体的なコードでやってみますね。
クラス(class)のオブジェクト生成のサンプルコード
In[6] は、クラスの定義部分で、上で解説しました。
In[7] から、クラスの使い方の部分になります。
In[7] では、クラス「NumDouble」のオブジェクトを生成して、「number」と名付けています。
オブジェクトを作った時に、同時に初期化も行われていることに注意です。
In [8] では、属性の値を確かめています。
Out [8] のように、0と出力され、きちんと初期化できていることが確認できました。
属性の中身の表示は、「オブジェクト名. 属性名」の形
number. value
で表示させることができます。
クラス(class)のメソッド活用のサンプルコード
In[9] では、number オブジェクトのメソッド double に
値「3」を入力しています。
メソッドは
「生成したオブジェクト名. メソッド名(値)」
という形で使えます。
属性の中身を「オブジェクト名. 属性名」の形
number. value
で表示させれます。
属性 value の値は、
Out [8] では、初期化されて0でしたが、
Out [10] では、3の2倍の「6」が表示されています。
この結果から、メソッド「double」がきちんと動いていることが確認できました。
というわけで、本記事では、
Python クラスのプログラミング について
- クラス(class)とは?クラスの特徴は?
- クラスの定義、書き方、メソッドとは?
- クラスの使い方、サンプルコード、具体例
など、クラスの基本知識について、サクッとご紹介しました。
こちらもございます↓
「クラス」については、こちらの書籍でも解説しています(無料)↓