Альтернатива callable(), для использования в Python 3
Я посмотрел на эту ветку, но некоторые концепции выше моего текущего уровня. В Python 2.x callable()
встроенный метод существует; Есть ли простой способ проверить, является ли что-то вызываемым или нет с помощью Python 3?
3 ответа
Вы можете просто сделать hasattr(object_name, '__call__')
вместо. В отличие от Python 2.x, это работает для всех вызываемых объектов, включая классы.
Оно вернулось. Python 3.2 имеет callable()
; больше нет необходимости использовать одну из менее удобных альтернатив.
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