Categories: Python

【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

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

ゆうまる

独学でプログラミングを勉強しているおじさん。いろんな言語を勉強したが浅く広くなためあまり仕事につながらない。また忘れっぽいため自分のブログを備忘録としても使っている。産まれてこのかたずっとネコを飼ってる生粋のネコ派。最近お腹が出てきて筋トレに奮闘中!

Recent Posts

【Python】任意の秒数だけ処理を一時停止する方法【sleep()関数】

この記事では、Pythonで任意の秒数だ…

7か月 ago

【Python】Wordの文書の新規作成と読み書き

この記事では、Pythonを使ってWor…

7か月 ago

【Python】メタクラスって結局なんなの?

この記事では、Pythonのメタクラスに…

7か月 ago

【Unity】割合から数値に数値から割合に変換する

この記事では、割合から数値に変換する関数…

7か月 ago

【Python】抽象クラスを定義する方法

この記事では、Pythonで抽象クラスを…

7か月 ago