Usually, after we have created a class instance in python, we will use instance.fun() to call a class function. For example:
class Person: def __init__(self, name): self.n = name def show_name(self): print(self.n) m = Person("Tom") m.show_name()
In this example code, ,we create a Person instance m, then we will use m.show_name() to display his name.
However, instance m is not callable, for example:
m = Person("Tom") m("Tome")
Run this code, you will find this error:
m("Tome") TypeError: 'Person' object is not callable
How to make a python instance callable?
You may find this kind of python code:
In this code, self.backbone is a class instance, however, it is used like a python function.
In python, we can define a __call__ function in class to make a class instance callable.
Python __call__ function is defined as:
def __call__(self, *args, **kwargs):
In order to understand args and kwargs, you can view this tutorial:
Understand Python **kwargs Parameter: A Beginner Guide
Understand Python *args Parameter: A Beginner Guide – Python Tutorial
Then we can use code below to make a python class instance callable.
class Person: def __init__(self, name): self.n = name def show_name(self): print(self.n) def __call__(self, *args, **kwargs): self.n = args[0] self.show_name() m = Person("Tom") m("Jack") m("Lily")
Run this code, you will see this result:
Jack Lily
You can find here class instance m is callable, you can use it like a function.