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

【Dart】コンストラクタのデフォルト引数について

Dartのコンストラクタのデフォルト引数…

2週間 ago

【Unity】有料アセットを無料で手に入れる方法

この記事では、Unityの有料アセットを…

4か月 ago

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

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

1年 ago

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

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

1年 ago

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

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

1年 ago