Функция callable в Python — предназначен для проверки для проверки объектов на вызов. Если говорить простыми словами, то данная функция вернет нам значение True, если передаваемый объект является функцией, в противном случае мы получим значение False.
Возвращаемые значения функции callable()
Метод callable() возвращает следующие параметры:
- True — если объект является вызываемым
- False — если объект окажется невызываемым
Следует запомнить, что если даже callable() вернет нам True, то даже в таком случае вызов объекта может завершится неудачей. В случае если callable() вернет False, то вызов объекта, в любом случае завершится неудачей.
Пример 1. Как работает функция callable()?
x = 5
print(callable(x))
def testFunction():
print("Test")
y = testFunction
print(callable(y))
#Результат
False
True
Как видите мы передаем переменную x в нашу функцию, и нам возвращается результат False, так как данный объект точно не является вызываемым. В другом случае, мы видим что, после передачи объекта y, нам возвращается значение True, но не забываем о том, что и в таком случае вызов данного объекта может завершится неудачей.
Пример 2. Объект является вызываемым
class Foo:
def __call__(self):
print('Print Something')
print(callable(Foo))
#Результат
True
На данном примере мы можем увидеть, что экземпляр класса Foo(), может быть вызван, на примере ниже попробуем вызвать данный объект, и убедимся, работает ли все так, как нам надо.
class Foo:
def __call__(self):
print('Print Something')
InstanceOfFoo = Foo()
# Prints 'Print Something'
InstanceOfFoo()
Пример 3. Вызываемый объект, не вызывается
class Foo:
def printLine(self):
print('Print Something')
print(callable(Foo))
#Результат
True
На примере выше, мы рассматриваем пример, где на первый взгляд кажется, что экземпляр класса Foo() является вызываем. Но на самом деле, тут мы увидим ошибку.
class Foo:
def printLine(self):
print('Print Something')
print(callable(Foo))
InstanceOfFoo = Foo()
# Raises an Error
# 'Foo' object is not callable
InstanceOfFoo()
#True Traceback (most recent call last): File "", line 10, in TypeError: 'Foo' object is not callable