【Python】学校のそれとは違います【クラスの作り方】

ケンケン
みんなはクラスって知ってる?
コタロウ
知ってます!僕らはケンケンクラスのメンバーです!
ぺんぺん
そうだね!
ケンケン
そのクラスとは違うんだな。。。
コタロウ
えー!?違うの?
ケンケン
プログラミングでクラスとはオブジェクトの設計図みたいなものなんだ
コタロウ
ちょっと何言ってるか分からないんですけど…
ケンケン
そっか(-_-;)それじゃクラスの基礎からじっくり学んでいこう!

 

 

自前でクラスを作れると何がいいの?

クラスの説明をする前に、クラスを知ったり自前で作れるようになると

どんなメリットがあるの?かを説明します。

 

▶クラスを知るメリット

  • プログラムの構造に敏感になれる
  • 複雑なプログラムをシンプルに書ける

以上が挙げられます。

後述しますが、クラスはオブジェクトやメソッドと深く関連しています。

どのメソッドがどのクラスとつながっていて、どのオブジェクトを使っているのか等を

じっくり考えてコードを読み書きすると、プログラムに対する理解力があがります。

また、クラスはオブジェクトを統括する監督のような仕事をしますので、

うまくクラスを扱えるようになると、複雑なプログラムをシンプルに書けるようになり、

グループで仕事をする際にもおおきな力になります。

 

なので、クラスの概念と簡単な使い方は早めに覚えてしまうことをおススメします。

 

クラスとは?

メリットが分かったところで、クラスって何なのか説明していきます。

クラスとは、

オブジェクト指向のプログラムで出てくるものですが、

簡単に言うとオブジェクトを作るための設計図のようなものです。

自動車を作るときでいえば、生産ラインのこと

たい焼きでいったら、型のことです。

クラス自体もオブジェクトですが、オブジェクトの親玉みたいなもので

子分のオブジェクト(車やたい焼き)を作ったり操作することができます。

 

「こんにちは」という文字はstr型のオブジェクトと言えますが、

正確に言うとstr型のクラスのオブジェクトと言い換えられます。

 

文字列を作成するための設計図であるstr型のクラスが先に存在していて、

そのクラスによって「こんにちは」という文字がstr型のオブジェクトとして存在して良いですよ

と定義しているのです。

 

初めてのクラス作成

それでは、まずクラスの定義の仕方からご紹介します。

クラスの定義

▶クラスの定義

class クラス名:

上記のようにクラスは定義しなくては初まりません。

定義することができたら以下のようにクラス内部に必要なメソッドを書いていきます。

 

▶メソッドの定義

def メソッド名(self, パラメーター)

処理内容

この形、覚えていますか?

そうです関数の時にご紹介した書式に良く似ています。

関数復習記事

ケンケン 今日は関数について勉強するよ ミケ 関数って前に勉強した気が・・・ ケンケン うん、print関数とか勉強したね。でも、今回は、その関数を作っちゃおうという話なんだ ミケ 関数を作る!!!なんだ[…]

メソッドと関数は厳密には違いますが、ここでは同じものとして扱います。

 

まず、第一パラメーターがselfになっていますね。

このselfの意味ですが、簡単に言うとオブジェクトを受け取るパラメーターです。

これでもよく分かりませんね。

 

先ほどの文字列の例を細かく分解して解説すると

  1. 「こんにちは」という文字列を打ちこんだ瞬間は、どのクラスにも該当していない宙ぶらりんの状態
  2. しかし、次の瞬間、コンピューターがこれは文字列ではないか?と判断しstr型のクラスに文字列を渡す
  3. strクラスが文字列の称号を「こんにちは」に与えて、以降文字列クラスのメソッドが使えるようになる

以上のようになります。

この②の状態を実現するために第一パラメーターselfが必要なのです。

クラスの立場から見てみると、文字列を渡される側になる訳です。

この時、渡されたデータを格納する箱が必要になります。

その箱の役割を第一パラメーターのselfが担っているのです。

 

つまり、第二パラメーター以降が必要ないメソッドであってもselfに該当するものが必要なのです。

クラスを作ってみる

論より証拠ということで、まずクラスを作ってみましょう。

▶初めてのクラス作成コード(first_class.py)

メソッドがひとつだけのクラスを作成しました。

第二パラメーターで受け取った文字列を表示するだけのクラスです。

これでクラスとメソッドを作ることはできましたが、これを使うにはどうしたらいいでしょうか。

クラスをインスタンス化する

クラスを呼び出してメソッドを使うには「クラスをインスタンス化」する必要があります。

インスタンス化という新しい言葉が出てきましたが、恐れることはありません。

インスタンスはオブジェクトと同義です。

つまり、クラスをインスタンス化するという言葉は、プログラムで使えるオブジェクトに変換する作業

と理解しておけばいいでしょう。

では、なぜ名前を分けて同じものを表現しているかと言うと、

クラスから作られたオブジェクトのことをインスタンスと呼んでいるからです。

ですので、とりあえずインスタンスと聞いたら、

オブジェクトのことだけどクラスから作られほやほやの存在、

程度に考えておけばいいでしょう。

 

▶インスタンス化の書式

変数 = クラス名(引数)

これで、クラスをインスタンス化(オブジェクト)してプログラムで使えるようになります。

では、FirstClassクラスをインスタンス化してmethodメソッドを使えるようにコードを書いてみましょう。

 

▶インスタンス化してメソッド実行(first_class.py)

先ほどのコードに2行追加しました。

▶インスタンス化

first = FirstClass()

この一行を追加することで、FirstClassクラスをインスタンス化してクラス内のメソッドが使えるようになります。

 

▶メソッド実行

first.method(‘はじめましてケンケンです。’)

「オブジェクト.メソッド(引数)」でメソッドが使えましたね。

その方程式に当てはめて、クラスのメソッドを実行しています。

それでは、コードを実行してみましょう。

methodメソッドを実行して文字列を書き出せました。

コードの流れは以下のようになっています。

オブジェクトと引数の関連はよく理解しておきましょう。

 

ちなみに、第一パラメーターのselfにはどのようなデータが格納されているでしょうか。

print関数で確認することができます。

少しコードを変更します。

▶selfの中身を見てみる(first_class.py)

▶コード変更点

 print(value)→ print(self)

上記部分を変更しています。

これを実行すると、selfの中身を見ることができます。

at以下の0x02D62E50が固有のオブジェクト情報になります。

これでselfにもちゃんと情報が入っていることが確認できました。

この情報をもとにメソッドが実行されていることを視覚的にも確認できましたね。

 

まとめ

いかがでしたか。

今回は、クラスの基礎事項をお伝えしました。

自前でクラスを作れるようになるとプログラミングの幅が広がり、やりたいことが実現しやすくなります。

是非、クラス・オブジェクト・インスタンス・メソッドなどの用語をしっかり理解して

脳内のシナプスをつなげておきましょう。

 

次回は、さらにクラスについて深堀りしていきますのでお楽しみに!

それでは、また次回お会いしましょう。

 

おすすめ記事

【python】自前で関数を作る理由と作法【定義・パラメータ・戻り値を学ぶ】

Pythonでアイキャッチを作ってみよう【Pillowライブラリで画像編集】

PythonでExcelシートから読み取りと書き込みをする方法【ライブラリの基本】

 


ケンケン
クラスについて理解できたかな?
コタロウ
ちょっと難しいけど分かった気がする
ケンケン
そうだね、最初は分かったような分からないような感じだよね。
ケンケン
次回以降も理解が深められるように説明していくよ!
ミケ
わーい!楽しみ
ケロ
僕は分かった!ケンケンがクラスで僕はオブジェクトでしょ?
ケンケン
うん、たぶん違うね。。。
ケロ
なんですとー!