Я просмотрел эту тему, но некоторые из них выше моего текущего уровня. В Python 2.x существует встроенный метод callable()
; есть ли простой способ проверить, можно ли что-то вызвать или не использовать Python 3?
Альтернатива вызываемому(), для использования в Python 3
Ответ 1
Вместо этого вы можете сделать hasattr(object_name, '__call__')
. В отличие от Python 2.x, это работает для всех вызываемых объектов, включая классы.
Ответ 2
Он вернулся. Python 3.2 имеет callable()
; больше нет необходимости использовать одну из менее удобных альтернатив.
Ответ 3
callable()
возвращается в Python 3.2.
Если вам нужно использовать Python 3.1 (крайне маловероятно), то помимо проверки на __call__
существуют также следующие решения:
-
2to3 изменяет a
callable(x)
наisinstance(x, collections.Callable)
-
шесть использует
any("__call__" in klass.__dict__ for klass in type(x).__mro__)
Т.е. он проверяет
__call__
в базовых классах. Это напоминает мне, что я должен спросить у Вениамина.:)
И, наконец, вы можете, конечно, просто попробовать:
try:
x = x()
except TypeError:
pass