クラスとは
Python では、関数を使用することで長く複雑なプログラムも効率的に作成することができることを紹介してきました。今回はさらに、「データ」と「処理」をまとめる「クラス」という機能を紹介します。「クラス」はモノの概念に着目して効率よくプログラムを作成していくための仕組みです。まずはこの、「モノの概念に着目する」というイメージを膨らませていきましょう。
Python に関するその他の記事一覧はこちら。
クラスのイメージ
バッターボックスに立っているある人物のイラストがあります。名前や年齢(まだ未定)などの「人物情報」と、この人物が直近起こしうる「動作」をその横に記載しています。
この「人物情報」が未定のある人物を基本情報として、名前が「太郎」年齢が「23歳」の人物①、名前が「次郎」年齢が「22歳」の人物②… と人物情報の違いによりある程度の個性を持たせた様々な人物を創造していけるとします。
これが、「クラス」のイメージです。
冒頭で紹介した「データ」が「人物情報」、「処理」が「動作」に対応しています。このように、現実世界にあるモノを「データ」と「処理」を用いてプログラムで再現することが「クラス」の1つのイメージになります。
同様の考え方を適応すれば、「犬」や「猫」、「家電製品」など現実世界のさまざまなモノをプログラムで再現できると思いませんか?
クラスの定義方法
class クラス名 :
def メソッド名(self, 引数リスト) :
self.変数 = …
return 式
上記がクラスの定義方法になります。この定義方法をもとに、クラスのイメージとしてあげた人物のクラスを作成してみましょう。
class Person:
# 「人物情報」の設定
def getName(self):
return self.name
def getAge(self):
return self.age
# 「動作」の設定
def swingBat(self):
print(self.name, "はバットを振った")
def bunt(self):
print(self.name, "はバントした")
def run(self):
print(self.name, "は走った")
class クラス名 : の次の行からはすべて、関数の定義となっていることに注目してください。getName()やgetAge()などは「人物情報」を設定するために定義されています。このとき、変数nameと変数ageはこのクラスにおける「データ属性」と呼ぶことが出来ます。
そのほかのswingBat()、bunt()、run()の関数は「動作」を設定するために定義しています。今回は簡単にprint()でターミナルへ出力するだけの処理を記述しているのみですが、これまでの関数の記事で扱ったような複雑な処理内容を記述することももちろん可能です。これらを「メソッド」と呼ぶことが出来ます。
メソッド定義の引数に設定されている「self」は、このクラスをもとにつくる「インスタンス自身」を表す変数になります。よって、self.name や self.age は作ったインスタンス自身のname、ageを表します。
インスタンスの生成
クラスを定義したあとは、そのクラスをもとにしてデータ属性に実際の値が格納されている実物を作り出すことが出来ます。クラスから作り出した実物を「インスタンス」と呼びます。さっそくインスタンスを作成するコードを見てみましょう。
class Person:
# 人物情報の設定
def getName(self):
return self.name
def getAge(self):
return self.age
# 動作の設定
def swingBat(self):
print(self.name, "はバットを振った")
def bunt(self):
print(self.name, "はバントした")
def run(self):
print(self.name, "は走った")
pr = Person()
pr.name = "太郎"
pr.age = 23
pr.swingBat()
pr.bunt()
pr.run()
上記のコードを実行すると、ターミナルには
太郎 はバットを振った
太郎 はバントした
太郎 は走った
と出力されます。コードの内容を詳細に見ていきましょう。
まず、インスタンスを作成するためには
インスタンス名 = クラス名()
と記述します。今回であれば pr = Person() としていますが、これはPersonクラスをもとにprという変数名のインスタンスを作成したコードになります。
データ属性・メソッドの利用
次は作成したインスタンスのデータ属性に対して実際の値を代入していきます。前述したコードでデータ属性に値を代入するコードは以下の部分になります。
pr.name = "太郎"
pr.age = 23
インスタンス名. 属性名 = 値
という記述をすることによってデータ属性に値を代入できます。
また、メソッドの使い方は下記の記述のようになっています。
pr.swingBat()
pr.bunt()
pr.run()
インスタンスのメソッドは、
インスタンス名.メソッド名( )
上記の記述によって呼び出すことが出来ます。メソッドを呼び出す際は( )を付ける点に注意してください。
コメント