Python callable() Explained

2 min read

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 callable
  • False - 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

PYTHON

Latest Articles

Latest from djangocentral

Capturing Query Parameters of request.get in Django

In Django, the request object contains a variety of information about the current HTTP request, including the query parameters. Query parameters are a way to pass additional information in the URL and are used to filter or sort data. The request object p…
Read more →

2 min read

Understanding related_name in Django Models

In Django, related_name is an attribute that can be used to specify the name of the reverse relation from the related model back to the model that defines the relation. It is used to specify the name of the attribute that will be used to access the relat…
Read more →

2 min read