12

我查看了这个帖子,但其中一些概念超出了我目前的水平。在 Python 2.x 中,callable()存在内置方法;有没有一种简单的方法可以检查某些东西是否可以使用 Python 3 调用?

4

3 回答 3

40

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

于 2012-04-06T15:43:39.850 回答
18

callable()回到 Python 3.2。

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

  • 2to3 将 acallable(x)变为isinstance(x, collections.Callable)

  • 六种用途

      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 回答