Python PR

【Python】インスタンスを呼び出し可能にする方法

記事内に商品プロモーションを含む場合があります

この記事では、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

関数内の関数【内部関数とクロージャ】