Developer

【Python独学】クラスの定義とオブジェクトの生成
2021.03.01
Lv1

【Python独学】クラスの定義とオブジェクトの生成

Pythonは、オブジェクト指向と呼ばれるプログラミング言語の一つです。
今回はクラスの定義とオブジェクトの生成に関する基本的な部分を紹介します。


クラス、オブジェクトについて

クラスやオブジェクトとは何なのかを簡単に説明します。
これまでの記事の中でも、クラスやオブジェクトという単語がたまに出てきましたね。

まず、オブジェクトとは、一般的に「物(モノ)」を意味します。
Pythonのデータ(数値や文字列、リスト、タプル、辞書など)はすべてオブジェクトであり、また、オブジェクトには実行できる関数(メソッド)が定義されています。

クラスとは、オブジェクトを作り出すための設計図(あるいは仕様書)のようなものです。
「どんなオブジェクトを作るか?」が書かれたものがクラスになります。
そして、実際にクラスを元に作成されたオブジェクトのことを、インスタンスと呼びます。

一般的な説明で言うと上記のような感じなのですが・・・全くもってイメージしづらいですよね?

例を挙げてもう少し説明します。
上述しましたが、クラスとは設計図のようなものです。

例えば、キャラクターの行動を操作するような対戦ゲームを作るとします。
キャラクターを作るためのクラスには「どのような属性(身長、体重、体力値、スタミナ値)を持ち、何が出来るのか(パンチする、キックする、ジャンプする)」が書かれています。
このクラス(設計図)を元に、実際のキャラクターというオブジェクト(インスタンス)を作り出していきます。

インスタンスは実行できるメソッド(パンチ/キック/ジャンプ)があるので、そのメソッドを実行することで対戦を表現できることになります。

ちなみに、クラスもまたオブジェクトです。
なんだかややこしく感じるかもしれませんが、プログラムを構成する部品(モノ)のすべてがオブジェクトです(というふんわりとした認識で実際に通っています)。

簡潔に言葉で表現するなら、次のようになります。
・オブジェクト⇒プログラムを構成する部品すべての総称
・クラス⇒設計図のようなもの
・インスタンス⇒クラスから作成されたオブジェクト

クラスとオブジェクト、それにインスタンスについて、なんとなく関係性のイメージをお持ちいただけたでしょうか。

ところで、なぜクラスやオブジェクトという考え方が存在するのでしょうか。
それは、便利だからという点にあります。

例えば人物を操作するような格闘ゲームを作るとして、人物は100種類選べるとします。
ただし100種類いるといっても、基本的な操作方法(殴る、蹴る)は大体同じだとします。
100種類全てに操作方法をいちいち定義するとなると、プログラムのコードの量は大変なことになってしまいそうですよね。

そこで、基本的な操作方法が書かれたクラスを1つ準備して、そのクラスを元にして100種類分の人物を作成すれば・・・
100種類にいちいち定義した場合と比較して、プログラムのコードの量が遥かに少なくなります。

他にも、例えば人物の操作方法を「Aボタンで殴る」から「Bボタンで殴る」に変えたくなったとします。
人物100種類全てに操作方法をいちいち定義しているような場合には、100か所もコードを修正しなきゃいけないわけです。大変ですね。
ですがクラスから人物を作成しているのであれば、クラスのコードを「Bボタンで殴る」に修正すれば良いだけです。
そのように、効率的にプログラムを作成・修正できるというのが大きなメリットの一つです。

クラスの定義とインスタンスを作る方法

それでは、クラスを定義する方法を説明します。
次のような書式となります。

class クラス名:
    ステートメント    #インデントに注意

ステートメント部分に、「属性(値)」と「実行できること(メソッド)」を記載していきます。
ステートメントの行はインデントが入っているので注意しましょう。
なお、クラス名は1文字目を大文字にするのが慣例となっています
(例えば人物を作成するPlayerクラス、自動車を作成するCarクラス、のように)

次に、インスタンスを作る方法です。
次のような書式となります。

インスタンス名 = クラス名()

同じクラスからは、何個でもインスタンスを作成することが出来ます。
実際はクラス名の後ろにある()の中に初期値を入れたりします。

以上が、クラス定義とインスタンスを作る書式となります。
クラスやインスタンス、オブジェクトに関する話は中々難しくはありますが、実際に扱う分にはシンプルな書式となります。
次回の記事からは実際に中身のあるクラスを準備してインスタンスを作成してみますので、慌てずに感覚を掴んでいきましょう。


まとめ

クラスとは、オブジェクトを作り出すための設計図(あるいは仕様書)のようなもの。
クラスを元に作成されたオブジェクトのことを、インスタンスと呼びます。

連載目次

独学で学ぶ Pythonプログラミング 連載目次