クラスとインスタンス
クラスの定義
プログラミングでメニューというもの
を生成するには、まずその設計図
を用意する必要がある。
設計図
のことをクラス
、もの
のことをインスタンス
と呼ぶ。
インスタンスを生成する流れは、❶クラスを用意する ❷クラスからインスタンスを生成する ❸インスタンスに情報を追加する
01. クラスを用意する
クラスはclass クラス名:
とすることで定義できる。
また、クラス名はMenuItem
のように大文字で始める。
class MenuItem:
クラスの中身(設計図の内容)はclass MenuItem:
より後の行で、インデントをして書く。
これは何も処理がない場合は、pass
と書く。
class MenuItem:
pass
インスタンスの生成
02. クラスからインスタンスを生成する
クラス名()
でそのクラスを呼び出すことで、クラス(設計図)を用いて新しくインスタンスを生成することができる。
変数名 = クラス名()
とすることで、生成したインスタンスを変数に代入することができる。
class MenuItem:
pass
menu_item1 = MenuItem()
インスタンス変数
03. インスタンスに情報を追加する
それぞれのインスタンス(メニュー)には、自由に様々な情報を追加することができる。
menu_item1.name = 'サンドイッチ'
とすることで、menu_item1
にname
がサンドイッチ
であるという情報を追加することができる。このname
のことをインスタンス変数
と呼ぶ。
class MenuItem:
pass
menu_item1 = MenuItem()
menu_item1.name = 'サンドイッチ'
インスタンス.インスタンス変数名
とすることで、そのインスタンス変数の値を用いることができる。
class MenuItem:
pass
menu_item1 = MenuItem()
menu_item1.name = 'サンドイッチ'
print(menu_ietm1.name)
サンドイッチ
複数のインスタンス
class MenuItem:
pass
menu_item1 = MenuItem()
menu_item1.name = 'サンドイッチ'
menu_item1.price = 500
print(menu_ietm1.name)
print(menu_item1.price)
menu_item1 = MenuItem()
menu_item1.name = 'チョコケーキ'
menu_item1.price = 400
print(menu_ietm1.name)
print(menu_item1.price)
サンドイッチ
500
チョコケーキ
400
インスタンスメソッド
クラスとメソッド
クラスの中では関数を定義することができる。クラスの中で定義した関数のことをメソッド
と呼ぶ。
メソッドの定義の方法は通常の関数と同じだが、第1引数にself
を追加する必要がある。
class MenuItem:
def hello(self)
print('こんにちは!')
クラスの中で定義したメソッドは、インスタンスに対して使うように呼び出す。インスタンス.メソッド名()
とすることで、メソッドを呼び出す。
class MenuItem:
def hello(self):
print('こんにちは!')
menu_item1 = MenuItem()
menu_item1.hello()
こんにちは!
インスタンスメソッド(self)
インスタンスメソッドの第1引数に指定したself
には、そのメソッドを呼び出したインスタンス自身が代入されている。
そのため、メソッド内でself.name
とすることで、そのメソッドを呼び出しているmenu_item1
のname
の値を取得することができる。
class MenuItem:
def info(self):
print(self.name)
menu_item1 = MenuItem()
menu_item1.name = 'サンドイッチ'
menu_item1.info()
サンドイッチ
name
とprice
の値を用いて、「サンドイッチ: ¥500」と出力する時、price
の値は数値型であるため、文字列と結合するためには文字列型に変換する必要がある。
class MenuItem:
def info(self):
print(self.name + ': ¥' + str(self.price))
menu_item1 = MenuItem()
menu_item1.name = 'サンドイッチ'
menu_item1.price = 500
menu_item1.info()
menu_item2 = MenuItem()
menu_item2.name = 'チョコケーキ'
menu_item2.price = 400
menu_item2.info()
サンドイッチ: ¥500
チョコケーキ: ¥400
インスタンスメソッド(戻り値)
インスタンスメソッドは通常の関数と同様に、戻り値を返すようにすることもできる。
class MenuItem:
def info(self):
return self.name + ': ¥' + str(self.price)
menu_item1 = MenuItem()
menu_item1.name = 'サンドイッチ'
menu_item1.price = 500
print(menu_item1.info())
menu_item2 = MenuItem()
menu_item2.name = 'チョコケーキ'
menu_item2.price = 400
print(menu_item2.info())
サンドイッチ: ¥500
チョコケーキ: ¥400
インスタンスメソッド(引数)
インスタンスメソッドに引数を渡す場合、メソッドの定義側ではself
の分だけ引数の順番がずれる。
class MenuItem:
def info(self):
return self.name + ': ¥' + str(self.price)
def get_total_price(self, count):
total_price = self.price * count
return total_price
menu_item1 = MenuItem()
menu_item1.name = 'サンドイッチ'
menu_item1.price = 500
print(menu_item1.info())
result = menu_item1.get_total_price(4)
print('合計は' + str(result) + '円です')
サンドイッチ: ¥500
合計は2000円です
__init__メソッド(1)
__init__メソッド(2)
__init__メソッド(3)
編集中です。