In programming, a callable is something that can be called.
In Python, a callable is anything that can be called, using parentheses and maybe with some arguments. Functions, Generators, and Classes are inherently callable in Python.
The callable()
method takes an object and returns a boolean.
True
- if the object is callableFalse
- if the object is not callable
The callable()
method checks if the object is either of the two -
- An instance of a class with a
__call__
method - Is of a type that has a which indicates callability such as in functions, classes, etc. or has a non-null
tp_call
(c struct) member.
Since functions are callable in Python.
def my_function():
print("Hi, I'm a function")
callable(my_function)
Output
True
This indicates that every time we create a function, Python creates a callable object for it. You can also verify the presence of __call__
attribute.
my_function.__call__
Output
<method-wrapper '__call__' of function object at 0x7f08706d5840>
Similarly for a Class,
class MyClass():
def my_method(self):
print("Hi, I am a class method")
callable(MyClass)
Output
True
However, if you create an object and run callable()
method over that then you will observe that class objects are not inherently callable in Python.
my_obj = MyClass()
callable(my_obj)
Output
False
If you try to call the object with parentisis you will get an error message saying object is not callble.
my_obj()
Output
TypeError: 'MyClass' object is not callable
However, we can create classes having __call__
method which makes instance of the class callable.
Making Class objects callable in Python
class MyClass():
def __call__(self):
print("I am callable now")
def my_method(self):
print("Hi, I am a class method")
my_obj = MyClass()
callable(my_obj)
Output
True
Now if you call the object the __call__
method will run.
my_obj()
Output
I am callable now