替代callable(),用于Python 3

时间:2010-12-08 01:34:57

标签: python-3.x callable

我看了this thread,但有些概念高于我目前的等级。在Python 2.x中,存在callable()内置方法;是否有一种简单的方法可以检查某些东西是否可以使用Python 3进行调用?

3 个答案:

答案 0 :(得分:40)

回来了。 Python 3.2有callable();不再需要使用一种不太方便的替代方案。

答案 1 :(得分:18)

callable()回到了Python 3.2。

如果您需要使用Python 3.1(极不可能),那么除了检查__call__之外,还有以下解决方案:

  • 2to3将callable(x)更改为isinstance(x, collections.Callable)

  • 六次使用

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

    即它检查基类中的__call__。这让我想起我应该问本杰明为什么。 :)

最后,您当然可以尝试:

try:
    x = x()
except TypeError:
    pass

答案 2 :(得分:8)

您可以改为hasattr(object_name, '__call__')。与Python 2.x不同,这适用于所有可调用对象,包括类。