12

私はこのスレッドを見ましたが、いくつかの概念は私の現在のレベルを上回っています。Python 2.xには、callable()組み込みメソッドが存在します。Python 3を使用して何かが呼び出可能かどうかを確認する簡単な方法はありますか?

4

3 に答える 3

40

戻ってきました。Python3.2にはcallable(); あまり便利ではない代替手段の1つを使用する必要はもうありません。

于 2012-04-06T15:43:39.850 に答える
18

callable()Python3.2に戻ってきました。

Python 3.1を使用する必要がある場合(ほとんどありません)、チェックに加えて__call__、次の解決策もあります。

  • 2to3はにを変更しcallable(x)ますisinstance(x, collections.Callable)

  • 6つの用途

      any("__call__" in klass.__dict__ for klass in type(x).__mro__)
    

    __call__つまり、基本クラスでチェックします。これは私がベンジャミンに理由を尋ねるべきであることを私に思い出させます。:)

そして最後に、もちろん簡単に試すことができます:

try:
    x = x()
except TypeError:
    pass
于 2010-12-08T05:33:48.527 に答える
9

代わりに行うことができますhasattr(object_name, '__call__')。Python 2.xとは異なり、これはクラスを含むすべての呼び出し可能なオブジェクトに対して機能します。

于 2010-12-08T01:40:31.987 に答える