web-dev-qa-db-ja.com

Pythonでクラスのインスタンスをどのように呼び出しますか?

これは、先ほど見た「クラスインスタンスの呼び出しによって返されるものを変更する」という質問に触発されましたが、すぐに__repr__で回答されました(受け入れられたため、質問者は実際にインスタンスを呼び出すつもりはありませんでした)。

クラスのインスタンスの呼び出しは、次のように実行できます。

instance_of_object = object() 
instance_of_object()

しかし、TypeError: 'object' object is not callableのようなエラーが表示されます。

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

したがって、Stackoverflowでこの質問があることを確認するには:

Pythonでクラスのインスタンスを実際にどのように呼び出しますか?

22
Aaron Hall

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

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!

そして実際に、そして成功して、calledクラスのインスタンスができました!

43
Aaron Hall