In Python, like in other languages, operators can be overloaded to perform operations beyond their intended use, allowing user-defined objects to behave more like built-in data types. This is achieved using special methods, often referred to as "magic methods", that Python provides for this purpose.
The general structure for operator overloading in Python is:
class ClassName:
def __magicmethod__(self, other):
# body of code
Following is the list of some commonly overloaded operators and their corresponding magic methods in Python:
Operator Name | Operator Symbol | Magic Method |
---|---|---|
Addition | + | __add__ |
Subtraction | - | __sub__ |
Multiplication | * | __mul__ |
Division | / | __truediv__ |
Floor Division | // | __floordiv__ |
Modulus | % | __mod__ |
Power | ** | __pow__ |
Bitwise AND | & | __and__ |
Bitwise OR | | | __or__ |
Bitwise XOR | ^ | __xor__ |
Bitwise NOT | ~ | __invert__ |
Left Bitwise Shift | << | __lshift__ |
Right Bitwise Shift | >> | __rshift__ |
Equality | == | __eq__ |
Inequality | != | __ne__ |
Greater than | > | __gt__ |
Less than | < | __lt__ |
Greater or equal | >= | __ge__ |
Less or equal | <= | __le__ |
In-place Addition | += | __iadd__ |
In-place Subtraction | -= | __isub__ |
String Representation | str() | __str__ |
Length | len() | __len__ |
Get Item | [] | __getitem__ |
Set Item | []= | __setitem__ |
Here is an example demonstrating operator overloading in Python:
class Point:
def __init__(self, x, y):
self.x = x
self.y = y
# Overloading the + operator
def __add__(self, other):
return Point(self.x + other.x, self.y + other.y)
# Overloading the - operator
def __sub__(self, other):
return Point(self.x - other.x, self.y - other.y)
# String representation of the object
def __str__(self):
return "({}, {})".format(self.x, self.y)
# Using the overloaded operators
p1 = Point(1, 2)
p2 = Point(3, 4)
print(p1 + p2) # Output: (4, 6)
print(p1 - p2) # Output: (-2, -2)
In the above example, the `+` and `-` operators are overloaded to work with `Point` objects. The `__str__` method is used to return a string representation of the object when it's printed.