pythonの初心者です。
pythonのインスタンスには
javaのtoString(文字列表現を取得)
phpの__invoke(インスタンスそのものを「実行」)
のように暗黙的に宣言するメソッドが多いなと思ったので備忘投稿です。
そもそもpythonの場合はマジックメソッドではなく組み込みメソッドって呼ぶんですかね
Tax.py
import re
class Tax:
rate = 0.1
# このクラスのインスタンスのデフォルトの挙動は現在の消費税率の表示とする
def __call__(self):
rate = self.rate * 10
print(f'現在の消費税率{rate}%')
def setRate(self, rate):
if (not re.search("^[0-9].[0-9]", str(rate))):
raise Exception('税率は小数で指定してください。')
self.rate = rate
def calcurate(self, prize):
return prize + prize * self.rate
from Tax import Tax
tax = Tax()
tax() // 現在の消費税率10.0%
tax.setRate(0.2)
tax() // 現在の消費税率20.0%
tax()のようにインスタンス変数自体を括弧をつけて関数を呼び出した場合に、__call__メソッド
がその名の通りコールされていることがわかる。