Альтернатива вызываемому(), для использования в Python 3

Я просмотрел эту тему, но некоторые из них выше моего текущего уровня. В Python 2.x существует встроенный метод callable(); есть ли простой способ проверить, можно ли что-то вызвать или не использовать 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