クラスとインスタンス
プログラミングでものを生成するには、まずそのものの設計図を用意する必要があります。
設計図をクラス
、ものをインスタンス
と呼びます。
クラスとインスタンスは理解が難しく様々な捉え方があります。
私はたいやきでイメージしており、
・クラス
:たい焼きの型
・インスタンス
:たい焼き
と捉えています。
クラスの定義
クラスは「class クラス名:
」と記述することで定義できます。
クラス名は「FruitPrice」のように大文字で始めるようにします。
class FruitPrice:
#処理を記入
インスタンス生成
クラス()
と記述してクラスを呼び出すことで、クラスを用いて新しくインスタンスを生成することができます。
また、「変数名 = クラス名()
」と記述することで生成したインスタンスを変数に代入することができます。
class FruitPrice:
#処理を記入
fruit_price = FruitPrice()
インスタンスにはそれぞれ名前や値段などの情報を追加することができます。
例えば上記では、「fruit_price.name = 'apple'
」とすることで、変数fruit_price
にname
がapple
であるという情報を追加することができます。この時、name
のことを「インスタンス変数
」と呼びます。
class FruitPrice:
pass # passは処理が何もないことを表します
fruit_price = FruitPrice()
fruit_price.name = 'apple'
print(fruit_price.name)
apple
メソッド
クラスの中では関数を定義することができます。クラスの中で定義した関数を「メソッド
」と呼びます。
メソッドの定義の方法は通常の関数のと同じですが、第1引数にself
を追加する必要があります。
クラスの中で定義したメソッドを呼び出す
呼び出すには「インスタンス.メソッド名()
」と記述することで呼び出すことができます。
クラスの中で定義し、インスタンスに対して呼び出すメソッドのことを、「インスタンスメソッド
」と呼びます。
例ではhello
がインスタンスメソッドに当たります。
class FruitPrice:
def hello(self):
print('おはよう')
fruit_price = FruitPrice() # インスタンス生成し、変数に代入
fruit_price.hello() # クラスの中で定義したメソッドを呼び出す
おはよう
self
ここでインスタンスメソッドでの第1引数に指定したself
にはそのメソッドを呼び出したインスタンス自身が代入されています。
下図の例では、メソッド内でself.name
とすることで、そのメソッドを呼び出しているfruit_price
のname
の値を取得することができます。
class FruitPrice:
def info(self): # selfにfruit_priceが代入される
print(self.name)
fruit_price = FruitPrice()
fruit_price.name = 'apple'
fruit_price.info() # クラスの中で定義したメソッドを呼び出す
apple
ここまで学んだことを用いて、fruitの合計金額の出力を行います
class FruitPrice:
def info(self):
return self.name + 'は'+ str(self.price) + '円です' #self.priceは数値なので文字列に変換する必要があります
def get_total_price(self, count):
total_price = self.price * count
return total_price
fruit_price = FruitPrice()
fruit_price.name = 'apple'
fruit_price.price = 300
print(fruit_price.info())
result = fruit_price.get_total_price(3)
print('合計金額は' + str(result) + '円です')
appleは300円です
合計金額は900円です
ここで気をつけるポイントは、インスタンスメソッドに引数を渡す場合、メソッドの定義側ではself
の分だけ引数の順番がずれることです。
fruit_price.get_total_price(3)
の3
はget_total_price(self, count)
のcount
に代入されます。