Python
    About Lesson

    Operator overloading in Python allows you to define how operators behave with user-defined types (classes). This enables you to use operators like +, -, *, etc., with your custom objects, making them behave intuitively.

    Here’s a simple tutorial on how to overload operators in Python, with an example.

     

    Step 1: Define a Class

    First, let’s define a simple class representing a 2D point.

    class Point:
    def __init__(self, x, y):
    self.x = x
    self.y = y

    def __repr__(self):
    return f"Point({self.x}, {self.y})"

     

    Step 2: Overload an Operator

    To overload an operator, you need to define a special method in your class. These methods have double underscores (__) around their names. Here are some common operators and their corresponding methods:

    • + : __add__
    • - : __sub__
    • * : __mul__
    • / : __truediv__

    Let’s overload the + operator to add two Point objects.

    class Point:
    def __init__(self, x, y):
    self.x = x
    self.y = y

    def __repr__(self):
    return f"Point({self.x}, {self.y})"

    def __add__(self, other):
    if isinstance(other, Point):
    return Point(self.x + other.x, self.y + other.y)
    return NotImplemented

     

    Step 3: Use the Overloaded Operator

    Now you can create Point objects and use the + operator with them.

    p1 = Point(1, 2)
    p2 = Point(3, 4)
    p3 = p1 + p2

    print(p3) # Output: Point(4, 6)

     

    Step 4: Overload Other Operators

    You can similarly overload other operators. For example, let’s overload the - operator.

    class Point:
    def __init__(self, x, y):
    self.x = x
    self.y = y

    def __repr__(self):
    return f"Point({self.x}, {self.y})"

    def __add__(self, other):
    if isinstance(other, Point):
    return Point(self.x + other.x, self.y + other.y)
    return NotImplemented

    def __sub__(self, other):
    if isinstance(other, Point):
    return Point(self.x - other.x, self.y - other.y)
    return NotImplemented

     

    Now you can subtract Point objects using the - operator.

    p1 = Point(5, 7)
    p2 = Point(2, 3)
    p3 = p1 - p2

    print(p3) # Output: Point(3, 4)
     
    Operator overloading allows your custom classes to behave more like built-in types. It makes your code more intuitive and readable when working with user-defined objects. You just need to define the appropriate special methods in your class to overload the operators you need.
     
    class Point:
    def __init__(self, x, y):
    self.x = x
    self.y = y

    def __repr__(self):
    return f"Point({self.x}, {self.y})"

    def __add__(self, other):
    if isinstance(other, Point):
    return Point(self.x + other.x, self.y + other.y)
    return NotImplemented

    def __sub__(self, other):
    if isinstance(other, Point):
    return Point(self.x - other.x, self.y - other.y)
    return NotImplemented

    # Example usage
    p1 = Point(5, 7)
    p2 = Point(2, 3)
    p3 = p1 + p2
    p4 = p1 - p2

    print(p3) # Output: Point(7, 10)
    print(p4) # Output: Point(3, 4)