1. ホーム
  2. python

[解決済み] Pythonでクラスのインスタンスを呼び出すには?

2022-03-03 10:36:20

質問

これは、私がちょうど見た質問、"クラスのインスタンスを呼び出したときに返されるものを変更する"に触発されたものですが、すぐに次のように答えられました。 __repr__ (と受け止められたので、質問者は実際にはインスタンスを呼び出すつもりはなかったのでしょう)。

これで、クラスのインスタンスを呼び出すことは、このようにできるようになりました。

instance_of_object = object() 
instance_of_object()

のようなエラーが発生します。 TypeError: 'object' object is not callable .

この動作は、CPythonで定義されている のソースはこちらです。

そこで、確実にStackoverflowでこの質問をするために。

Pythonでクラスのインスタンスを実際に呼び出すにはどうすればよいですか?

どのように解決するのですか?

以下のようにクラスのインスタンスを呼び出します。

o = object() # create our instance
o() # call the instance

しかし、これでは通常、エラーが発生します。

Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: 'object' object is not callable

どうすれば意図したとおりにインスタンスを呼び出し、そこから何か有用なものを得ることができるのでしょうか?

Pythonの特殊なメソッドを実装する必要があります。 __call__ !

class Knight(object):
    def __call__(self, foo, bar, baz=None):
        print(foo)
        print(bar)
        print(bar)
        print(bar)
        print(baz)

クラスをインスタンス化します。

a_knight = Knight()

これで、クラスのインスタンスを呼び出すことができます。

a_knight('ni!', 'ichi', 'pitang-zoom-boing!')

と表示されます。

ni!
ichi
ichi
ichi
pitang-zoom-boing!

そして、今、実際に、成功しました。 という クラスのインスタンスを作成します。