callable

Функция callable() проверяет, можно ли вызвать переданный объект как функцию. Возвращает True, если объект является вызываемым, и False в противном случае.

Синтаксис

callable(object)

Аргументы

  • object:
    • Что означает: Объект, который необходимо проверить на вызов.
    • Возможные значения: Любой объект Python.

Возвращаемое значение

Возвращает True, если объект можно вызвать как функцию (например, функция, метод, класс или объект с методом __call__). В противном случае возвращает False.

Примеры использования

# Проверка функции
print(callable(len))  # Вывод: True
# Проверка метода
class MyClass:
    def my_method(self):
        return "Hello"

obj = MyClass()
print(callable(obj.my_method))  # Вывод: True
# Проверка класса
class MyClass:
    pass

print(callable(MyClass))  # Вывод: True
# Проверка объекта без __call__
obj = MyClass()
print(callable(obj))  # Вывод: False
# Объект с методом __call__
class CallableObject:
    def __call__(self):
        return "Я вызываем!"

obj = CallableObject()
print(callable(obj))  # Вывод: True

Эквивалентный код

def pyplanet_callable(obj):
    return hasattr(obj, "__call__")

Частые ошибки

  1. Ошибочная проверка встроенных функций:

    print(callable(print))  # Вывод: True
    

    Причина: Встроенные функции всегда считаются вызываемыми, даже если их использование может быть ограничено контекстом.

  2. Проверка вызываемых объектов без вызова:

    obj = CallableObject()
    if callable(obj):
        print(obj)  # Выводит: <__main__.CallableObject object at ...>, а не "Я вызываем!"
    

    Решение: Чтобы получить результат, нужно вызвать объект, например, obj().

Часто задаваемые вопросы

  1. Какие объекты считаются вызываемыми? Все, у которых определён метод __call__. Это функции, методы, классы, а также пользовательские объекты с методом __call__.

  2. Почему callable() возвращает True для классов? Потому что классы можно вызывать для создания их экземпляров.

  3. Можно ли использовать callable() для проверки встроенных функций? Да, встроенные функции, такие как len, print или abs, являются вызываемыми.

  4. Как сделать объект вызываемым? Определите метод __call__ в классе:

    class MyCallable:
        def __call__(self):
            return "Теперь я вызываем!"
    
    obj = MyCallable()
    print(callable(obj))  # Вывод: True
    print(obj())          # Вывод: Теперь я вызываем!