はじめに
前回は、非常に小さなレトロ風RPGの、バトル画面を作りました。今回は、Pythonのクラスと、Pygameのスプライトについて学びます。

クラスとインスタンス
クラスは多くのプログラミング言語に存在している仕様です。Pythonにもクラスがあります。クラスはデータと処理をまとめてグループ化できる仕組みです。他にも便利な仕組みを持っています。
クラスは整数やテキストなどと同じような「型」になります。そして、クラスという設計図のようなものから、インスタンス(実体)と呼ばれるオブジェクト(物)を作ることができます。
実際にどのようなものか、Pythonのプログラムで見てみましょう。class_1.pyというファイルを作り、プログラムを書いて実行します。
class Chara:
# コンストラクター、第一引数はself
def __init__(self, name, age):
self.name = name
self.age = age
# インスタンス メソッド、第一引数はself
def get_prof(self):
res = f"{self.name} {self.age}"
return res
chara = Chara("勇者", 16) # インスタンスを生成
print(chara.name) # 「勇者」と表示
print(chara.age) # 「16」と表示
print(chara.get_prof()) # 「勇者 16」と表示
print(type(chara)) # 「<class '__main__.Chara'>」と表示
print(type(Chara)) # 「<class 'type'>」と表示
class Chara:に続くインデントしたグループが、クラスの定義です。定義が終わったあと、Chara("勇者", 16)のように、Charaに()を付けて関数として実行すると、インスタンスが生成されて戻り値として得られます。
Charaクラス内のdef __init__(self, ~):とは、クラスの特別な関数で、コンストラクターと呼ばれます。コンストラクターを日本語に訳すと、製造者や建設者という意味になります。プログラミングの文書では構築子とも訳されます。Chara(~)のように書いてクラスのインスタンスを作ると、このコンストラクターが実行されます。
コンストラクターの第1引数はselfです。この変数は、インスタンス自身を表します。self.name、self.ageのように、self.~と書いて値を代入することで、インスタンス変数を作れます。
こうして作ったインスタンス変数は、chara = Chara("勇者", 16)のようにインスタンスを作ったあとに、chara.name、chara.ageのように利用できます。
続くdef get_prof(self):はインスタンス メソッドと呼ばれるものです。クラスに付属する関数は、特別にメソッドと呼ばれます。これまでこうしたメソッドも、説明の簡易化のために関数と呼んできました。メソッドは関数でもあるので、関数と呼んでも不都合はありません。インスタンス メソッドは、chara.get_prof()という形で利用できます。
インスタンス メソッドの第一引数は、コンストラクターと同じようにselfです。この変数selfを利用して、インスタンス変数やメソッドを利用できます。

