この記事では、Pythonで定義したユーザー定義クラスのインスタンスを呼び出し可能にする方法を解説します。
クラスのインスタンスを呼び出し可能にするには、クラスに__call__
メソッドを定義します。
class A:
# 呼び出された時の処理
def __call__(self) -> None:
print('call')
# インスタンス化
a = A()
# 呼び出す
a()
実行結果
call
__call__
メソッドを定義してインスタンスを呼び出し可能にすることで少し遅くなってしまうが、継承で記号を共有することができます。
class A:
def __init__(self, x, y) -> None:
self.x = x
self.y = y
def __call__(self):
return self.x + self.y
class B(A):
def __call__(self):
return self.x ** 2 + self.y ** 2
# インスタンス化
b = B(1, 2)
# 呼び出す
print(b())
実行結果
5
ネストされた関数を使うことで同様の処理が可能です。
def func(x, y):
def result():
return x + y
return result
f = func(1, 2)
print(f())
実行結果
3