はじめに
前回は、非常に小さなレトロ風RPGの、バトル画面を作りました。今回は、Pythonのクラスと、Pygameのスプライトについて学びます。
![](http://cz-cdn.shoeisha.jp/static/images/article/19460/19460_001.png)
クラスとインスタンス
クラスは多くのプログラミング言語に存在している仕様です。Pythonにもクラスがあります。クラスはデータと処理をまとめてグループ化できる仕組みです。他にも便利な仕組みを持っています。
クラスは整数やテキストなどと同じような「型」になります。そして、クラスという設計図のようなものから、インスタンス(実体)と呼ばれるオブジェクト(物)を作ることができます。
![クラスとインスタンス](http://cz-cdn.shoeisha.jp/static/images/article/19460/19460_002.png)
実際にどのようなものか、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
に()
を付けて関数として実行すると、インスタンスが生成されて戻り値として得られます。
![クラスの定義とインスタンスの生成](http://cz-cdn.shoeisha.jp/static/images/article/19460/19460_003.png)
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
を利用して、インスタンス変数やメソッドを利用できます。
![](http://cz-cdn.shoeisha.jp/static/images/article/19460/19460_004.png)