ダウンロード 第6回 サンプルファイル (6.6 KB)
自動化やAIなどさまざまな分野で活用され、需要が高いPython。この連載では、小さなレトロ風ゲームを作りながら、Pythonを学ぶことができます。第6回は、応用編です。クラスとスプライトについて学びます。これを覚えることで、よりメンテナンスをしやすいプログラムを書くことができるようになります。
はじめに
前回は、非常に小さなレトロ風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を利用して、インスタンス変数やメソッドを利用できます。

この記事は参考になりましたか?
- レトロ風ゲームを作って学ぶPython入門連載記事一覧
-
- 【作って学ぶPython】クラスとスプライトを学んでメンテナンスしやすいコードを書こう!
- 【作って学ぶPython】バトル画面を実装させ、レトロ風RPGを完成させよう!
- 【作って学ぶPython】ゲームを開発してみよう!タイトル、マップ画面の実装編
- この記事の著者
-
柳井 政和(ヤナイ マサカズ)
クロノス・クラウン合同会社 代表社員http://crocro.com/オンラインソフトを多数公開。プログラムを書いたり、ゲームを作ったり、記事を執筆したり、マンガを描いたり、小説を書いたりしています。「めもりーくりーなー」でオンラインソフト大賞に入賞。最近は、小説家デビューして小説も書いています(『裏切りのプログラム』他)。面白いことなら何でもOKのさすらいの企画屋です。
※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です
この記事は参考になりましたか?
この記事をシェア
