Operator Overloading in Python - GeeksforGeeks

21 Feb, 2022
Operator Overloading means giving extended meaning beyond their predefined operational meaning. For example operator + is used to add two integers as well as join two strings and merge two lists. It is achievable because ‘+’ operator is overloaded by int class and str class. You might have noticed that the same built-in operator or function shows different behavior for objects of different classes, this is called Operator Overloading.  
Python3
# Python program to show use of# + operator for different purposes. print(1 + 2) # concatenate two stringsprint("Geeks"+"For") # Product two numbersprint(3 * 4) # Repeat the Stringprint("Geeks"*4)
3
GeeksFor
12
GeeksGeeksGeeksGeeks

Output:  
3
GeeksFor
12
GeeksGeeksGeeksGeeks
How to overload the operators in Python? Consider that we have two objects which are a physical representation of a class (user-defined data type) and we have to add two objects with binary ‘+’ operator it throws an error, because compiler don’t know how to add two objects. So we define a method for an operator and that process is called operator overloading. We can overload all existing operators but we can’t create a new operator. To perform operator overloading, Python provides some special function or magic function that is automatically invoked when it is associated with that particular operator. For example, when we use + operator, the magic method __add__ is automatically invoked in which the operation for + operator is defined.Overloading binary + operator in Python : When we use an operator on user defined data types then automatically a special function or magic function associated with that operator is invoked. Changing the behavior of operator is as simple as changing the behavior of method or function. You define methods in your class and operators work according to that behavior defined in methods. When we use + operator, the magic method __add__ is automatically invoked in which the operation for + operator is defined. There by changing this magic method’s code, we can give extra meaning to the + operator. Code 1:  
Python3
# Python Program illustrate how# to overload an binary + operator class A:    def __init__(self, a):        self.a = a     # adding two objects    def __add__(self, o):        return self.a + o.aob1 = A(1)ob2 = A(2)ob3 = A("Geeks")ob4 = A("For") print(ob1 + ob2)print(ob3 + ob4)
3
GeeksFor

Output :  
3
GeeksFor
Code 2:  
Python3
# Python Program to perform addition# of two complex numbers using binary# + operator overloading. class complex:    def __init__(self, a, b):        self.a = a        self.b = b      # adding two objects    def __add__(self, other):        return self.a + other.a, self.b + other.b Ob1 = complex(1, 2)Ob2 = complex(2, 3)Ob3 = Ob1 + Ob2print(Ob3)
(3, 5)

Output :  
(3, 5)
Overloading comparison operators in Python :  
Python3
# Python program to overload# a comparison operators class A:    def __init__(self, a):        self.a = a    def __gt__(self, other):        if(self.a>other.a):            return True        else:            return Falseob1 = A(2)ob2 = A(3)if(ob1>ob2):    print("ob1 is greater than ob2")else:    print("ob2 is greater than ob1")
Output :  
ob2 is greater than ob1
Overloading equality and less than operators :  
Python3
# Python program to overload equality# and less than operators class A:    def __init__(self, a):        self.a = a    def __lt__(self, other):        if(self.a<other.a):            return "ob1 is lessthan ob2"        else:            return "ob2 is less than ob1"    def __eq__(self, other):        if(self.a == other.a):            return "Both are equal"        else:            return "Not equal"                 ob1 = A(2)ob2 = A(3)print(ob1 < ob2) ob3 = A(4)ob4 = A(4)print(ob1 == ob2)
Output :  
ob1 is lessthan ob2
Not equal
Note: It is not possible to change the number of operands of an operator. For ex. you cannot overload a unary operator as a binary operator. The following code will throw a syntax error.
Python3
# Python program which attempts to# overload ~ operator as binary operator class A:    def __init__(self, a):        self.a = a     # Overloading ~ operator, but with two operands    def __invert__(self, other):        return "This is the ~ operator, overloaded as binary operator."  ob1 = A(2)ob2 = A(3) print(ob1~ob2)
 
bestharadhakrishna
somanyusamal
kannasockalingam
ovd0312
Picked
Python-Operators
Python
Writing code in comment?
Please use ide.geeksforgeeks.org,
generate link and share the link here.
Read JSON file using Python
Adding new column to existing DataFrame in Pandas
Python map() function
How to get column names in Pandas dataframe
Read a file line by line in Python
How to Install PIP on Windows ?
Enumerate() in Python
Different ways to create Pandas Dataframe
Iterate over a list in Python
Python String | replace()