Python operator overloading allows a single operator to perform more than one operation based on the class (type) of operands. For example, operator + is used to add two integers as well as join two strings and merge two lists.
The ‘+’ operator is overloaded by int class and str class and this is called Operator Overloading.
Python operator overloading
A simple example code the +
operator will perform arithmetic addition on two numbers, merge two lists, or concatenate two strings.
# addition on two numbers
print(10 + 20)
# concatenate two strings
print("Hello" + "World")
# merge two lists
list1 = ["a", "b", "c"]
list2 = [1, 2, 3]
list3 = list1 + list2
print(list3)
Output:
For example user has two objects which are the physical representation of a user-defined data type class. The user has to add two objects using the “+” operator, and TypeError
raised, since Python didn’t know how to add two Point
objects together.
However, we can achieve this task in Python through operator overloading.
Python Special Functions: Class functions that begin with a double underscore __
are called special functions in Python.
Using special functions, we can make our class compatible with built-in functions.
>>> p1 = Point(2,3)
>>> print(p1)
<__main__.Point object at 0x00000000031F8CC0>
Overloading binary + operator in Python
class A:
def __init__(self, a):
self.a = a
# adding two objects
def __add__(self, o):
return self.a + o.a
ob1 = A(10)
ob2 = A(20)
ob3 = A("A")
ob4 = A("B")
print(ob1 + ob2)
print(ob3 + ob4)
Output:
30
AB
Overloading comparison operators in Python
class A:
def __init__(self, a):
self.a = a
def __gt__(self, other):
if(self.a>other.a):
return True
else:
return False
ob1 = 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
Python magic functions used for operator overloading:
Binary Operators:
Operator | Magic Function |
---|---|
+ | __add__(self, other) |
– | __sub__(self, other) |
* | __mul__(self, other) |
/ | __truediv__(self, other) |
// | __floordiv__(self, other) |
% | __mod__(self, other) |
** | __pow__(self, other) |
>> | __rshift__(self, other) |
<< | __lshift__(self, other) |
& | __and__(self, other) |
| | __or__(self, other) |
^ | __xor__(self, other) |
Comparison Operators:
Operator | Magic Function |
---|---|
< | __LT__(SELF, OTHER) |
> | __GT__(SELF, OTHER) |
<= | __LE__(SELF, OTHER) |
>= | __GE__(SELF, OTHER) |
== | __EQ__(SELF, OTHER) |
!= | __NE__(SELF, OTHER) |
Assignment Operators:
Operator | Magic Function |
---|---|
-= | __ISUB__(SELF, OTHER) |
+= | __IADD__(SELF, OTHER) |
*= | __IMUL__(SELF, OTHER) |
/= | __IDIV__(SELF, OTHER) |
//= | __IFLOORDIV__(SELF, OTHER) |
%= | __IMOD__(SELF, OTHER) |
**= | __IPOW__(SELF, OTHER) |
>>= | __IRSHIFT__(SELF, OTHER) |
<<= | __ILSHIFT__(SELF, OTHER) |
&= | __IAND__(SELF, OTHER) |
|= | __IOR__(SELF, OTHER) |
^= | __IXOR__(SELF, OTHER) |
Unary Operator:
Operator | Magic Function |
---|---|
– | __NEG__(SELF, OTHER) |
+ | __POS__(SELF, OTHER) |
~ | __INVERT__(SELF, OTHER) |
Comment if you have any doubts or suggestions on this Python operator topic.
Note: IDE: PyCharm 2021.3.3 (Community Edition)
Windows 10
Python 3.10.1
All Python Examples are in Python 3, so Maybe its different from python 2 or upgraded versions.