実践:その2
アキュムレータへの入力処理を簡潔に記述することを目的として、改良を施したMyAccumulator2クラスを示す。
メソッド__call__は特殊メソッドであり、インスタンスを割り当てた変数名から呼び出される。メソッド名を指定することなくインスタンスを実行できるようになる。
code:acc2.py
class MyAccumulator2:
def __init__(self):
self.n = 0
def add(self, x):
self.n = self.n + x
return self.n
def __call__(self, x): # (1)
y = self.add(x) # __call__メソッドはaddメソッドを呼び出す
return y
関連:__call__メソッド、インスタンス内でのメソッドの呼出し
code:(続き).py
ac1 = MyAccumulator2()
y = ac1(1) # (2)
print(y)
y = ac1(2) # (2')
print(y)
y = ac1(1) # (2'')
print(y)
特殊メソッド__call__の中でaddを呼び出すことで、変数名ac1をaddメソッドのように利用できるようにした。実行結果はacc1.pyと同じである。