メソッド

このレッスンでは、クラスの中に関数を書いて、データと処理を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()) # 173

milk.total() と呼ぶと、self には milk が入ります。だからメソッドの中では self.price で自分の金額を読めます。引数を書いていないのに動くのは、self を Python が渡しているからです。

金額は整数に丸めてから返す

消費税率の 1.1 は float なので、掛け算の結果には 173.8 のような端数や、462.00000000000006 のような誤差が出ます。金額をそのまま画面に出すと読みにくいので、int() で整数に落としてから返します。int() は小数点以下を切り捨てるので、円未満切り捨ての計算とちょうど同じ意味になります。

引数を取るメソッドも書ける

self の後ろに引数を足せば、呼ぶときに値を渡せます。

def over(self, limit): return self.price >= limit

milk.over(500) のように呼びます。データを持っている本人に判断を任せられるので、呼ぶ側のコードが短くなります。

要件

  1. total は self.price に 1.1 を掛けた値を int で整数に丸めて返すこと
  2. tax_included は Expense を作り、その total メソッドを呼んだ結果を返すこと
  3. 戻り値は整数にすること

入出力例

tax_included("牛乳", 158)173 tax_included("書籍", 1600)1760

ヒント

生田 陸人
ゆめさくエンジニア / 現役ソフトウェアエンジニア
編集 LuaGate編集部
main.py
学習モード

メモ

メソッド

⌘S で保存