альтернатива callable (), для использования в Python 3 - PullRequest
11 голосов
/ 08 декабря 2010

Я посмотрел на эту ветку , но некоторые концепции выше моего текущего уровня. В Python 2.x существует встроенный метод callable(); Есть ли простой способ проверить, вызывается ли что-либо или нет с помощью Python 3?

Ответы [ 3 ]

40 голосов
/ 06 апреля 2012

Он вернулся.Python 3.2 имеет callable();больше нет необходимости использовать одну из менее удобных альтернатив.

18 голосов
/ 08 декабря 2010

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
8 голосов
/ 08 декабря 2010

Вы можете просто сделать hasattr(object_name, '__call__') вместо этого. В отличие от Python 2.x, это работает для всех вызываемых объектов, включая классы.

...