メソッド
このレッスンでは、クラスの中に関数を書いて、データと処理を1か所にまとめられるようになります。
処理がデータから離れている問題
これまでは税込金額を出すために、支出とは別の場所に関数を置いていました。
def tax_included(expense):
return int(expense["price"] * 1.1)この形だと、支出のデータ構造を変えたときに、離れた場所にある関数も一緒に直す必要があります。支出そのものが税込金額の出し方を知っていれば、直す場所は1か所で済みます。
メソッドはクラスの中の関数
クラスの中に def で書いた関数をメソッドと呼びます。第1引数は __init__ と同じく self で、そのインスタンス本人が入ります。
class Expense:
def __init__(self, name, price):
self.name = name
self.price = price
def total(self):
return int(self.price * 1.1)
milk = Expense("牛乳", 158)
print(milk.total()) # 173milk.total() と呼ぶと、self には milk が入ります。だからメソッドの中では self.price で自分の金額を読めます。引数を書いていないのに動くのは、self を Python が渡しているからです。
金額は整数に丸めてから返す
消費税率の 1.1 は float なので、掛け算の結果には 173.8 のような端数や、462.00000000000006 のような誤差が出ます。金額をそのまま画面に出すと読みにくいので、int() で整数に落としてから返します。int() は小数点以下を切り捨てるので、円未満切り捨ての計算とちょうど同じ意味になります。
引数を取るメソッドも書ける
self の後ろに引数を足せば、呼ぶときに値を渡せます。
def over(self, limit):
return self.price >= limitmilk.over(500) のように呼びます。データを持っている本人に判断を任せられるので、呼ぶ側のコードが短くなります。
要件
- total は self.price に 1.1 を掛けた値を int で整数に丸めて返すこと
- tax_included は Expense を作り、その total メソッドを呼んだ結果を返すこと
- 戻り値は整数にすること
入出力例
tax_included("牛乳", 158) → 173
tax_included("書籍", 1600) → 1760ヒント
編集 LuaGate編集部