我看了this thread,但有些概念高于我目前的等级。在Python 2.x中,存在callable()
内置方法;是否有一种简单的方法可以检查某些东西是否可以使用Python 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不同,这适用于所有可调用对象,包括类。