callable() function is a Python built-in function that returns True if the object is callable, else it returns False.
A callable as the name signifies is anything that can be called. So anything can be called as long as they belong to the class that defines the
__call__() magic method.
Python callable() function checks for either of the following.
- an instance of a class with a
- is of a type that has a non-null tp_call (c struct) member which indicates callability otherwise (such as in functions, methods etc.)
__call__() is invoked when the instance is ”called” as a function.
Note that classes are callable (calling a class returns a new instance); instances are callable if their class has a
callable() function returns:
- True: if the object being called is callable
- False: if the object being called is not callable
How to check if a Python object is callable or not?
foo = 'Python' print(callable(foo)) #this will return false #class class foo1: def __call__(self): print('Python') print(callable(foo1)) #this will return true #function def foo3(): print('Python') print(callable(foo3)) #this will return true #instance of a class class foo4: def test_func(self): print('python') object1 = foo4() object1() #this will throw error
This script will generate following output.
False True True Traceback (most recent call last): File "<pyshell#3>", line 1, in <module> object1() TypeError: 'foo4' object is not callable
As you can see the last line of code where we called the instance of class
foo4 raises an error because the instance of class object1 appears as callable but is not in actual.
This is because the object is not associated with any
__call__() function in the class
Now if we define class
foo4 with a function
__call__(), its instance won’t raise an error and will return True when checked if it’s callable or not.
class foo4: def __call__(self): print('python') object1 = foo4() object1() #check if it's callable or not print(callable(object1))>
Here is the output generated.
As you can see in above output, the object doesn’t raise any error when called and return True when checked.