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