Operator Overloading

Operator Overloading in Python with Simple Examples

Operator overloading allows you to define how Python operators (like +-*, etc.) work with your custom classes. This makes your objects behave more like built-in types.


1. What is Operator Overloading?

  • Python operators have predefined behaviors for built-in types.
  • Operator overloading lets you redefine these behaviors for your custom classes.
  • Achieved using special methods (dunder methods) like __add____sub__, etc.

2. Basic Syntax

python

class ClassName:
    def __special_method__(self, other):
        # Define custom behavior

3. Common Operator Overloading Methods

OperatorMethodExample Usage
+__add__obj1 + obj2
-__sub__obj1 - obj2
*__mul__obj1 * obj2
/__truediv__obj1 / obj2
==__eq__obj1 == obj2
<__lt__obj1 < obj2
>__gt__obj1 > obj2
str()__str__print(obj)

4. Practical Examples

Example 1: Vector Addition

python

class Vector:
    def __init__(self, x, y):
        self.x = x
        self.y = y
    
    # Overload + operator
    def __add__(self, other):
        return Vector(self.x + other.x, self.y + other.y)
    
    # Overload string representation
    def __str__(self):
        return f"Vector({self.x}, {self.y})"

# Usage
v1 = Vector(2, 3)
v2 = Vector(1, 4)
result = v1 + v2  # Calls v1.__add__(v2)
print(result)  # Output: Vector(3, 7)

Example 2: Book Comparison

python

class Book:
    def __init__(self, title, pages):
        self.title = title
        self.pages = pages
    
    # Overload > operator
    def __gt__(self, other):
        return self.pages > other.pages
    
    # Overload == operator
    def __eq__(self, other):
        return self.pages == other.pages
    
    def __str__(self):
        return f"'{self.title}' ({self.pages} pages)"

# Usage
book1 = Book("Python Basics", 300)
book2 = Book("Advanced Python", 500)

print(book1 > book2)   # Output: False
print(book1 == book2)  # Output: False
print(f"Book 1: {book1}")  # Output: Book 1: 'Python Basics' (300 pages)

Example 3: Shopping Cart Total

python

class ShoppingCart:
    def __init__(self):
        self.items = []
        self.prices = []
    
    def add_item(self, item, price):
        self.items.append(item)
        self.prices.append(price)
    
    # Overload + operator to combine carts
    def __add__(self, other):
        new_cart = ShoppingCart()
        new_cart.items = self.items + other.items
        new_cart.prices = self.prices + other.prices
        return new_cart
    
    # Overload string representation
    def __str__(self):
        return f"Cart: {self.items} - Total: ${sum(self.prices)}"

# Usage
cart1 = ShoppingCart()
cart1.add_item("Apple", 1.5)
cart1.add_item("Banana", 0.8)

cart2 = ShoppingCart()
cart2.add_item("Milk", 2.5)

combined_cart = cart1 + cart2  # Calls cart1.__add__(cart2)
print(combined_cart)
# Output: Cart: ['Apple', 'Banana', 'Milk'] - Total: $4.8

Example 4: Student Grade Comparison

python

class Student:
    def __init__(self, name, grade):
        self.name = name
        self.grade = grade
    
    # Overload < operator
    def __lt__(self, other):
        return self.grade < other.grade
    
    # Overload string for printing
    def __str__(self):
        return f"{self.name}: {self.grade}%"

# Usage
student1 = Student("Alice", 85)
student2 = Student("Bob", 92)

print(student1 < student2)  # Output: True
print(student1)  # Output: Alice: 85%
print(student2)  # Output: Bob: 92%

5. Key Benefits of Operator Overloading

  1. Intuitive Code: Makes custom objects work like built-in types.
  2. Readabilityvector1 + vector2 is clearer than vector1.add(vector2).
  3. Consistency: Your classes behave similarly to Python’s built-in classes.

6. Important Notes

  • Don’t Overuse: Only overload operators when it makes logical sense.
  • Consistency: Ensure overloaded operators behave as users would expect.
  • Error Handling: Handle cases where operations might not make sense.

Summary

Operator overloading makes your custom classes more Pythonic and user-friendly. By implementing special methods like __add____eq__, and __str__, you can make your objects work seamlessly with Python’s built-in operators! 🚀

Similar Posts

  • Dictionaries

    Python Dictionaries: Explanation with Examples A dictionary in Python is an unordered collection of items that stores data in key-value pairs. Dictionaries are: Creating a Dictionary python # Empty dictionary my_dict = {} # Dictionary with initial values student = { “name”: “John Doe”, “age”: 21, “courses”: [“Math”, “Physics”, “Chemistry”], “GPA”: 3.7 } Accessing Dictionary Elements…

  • Indexing and Slicing in Python Lists Read

    Indexing and Slicing in Python Lists Read Indexing and slicing are fundamental operations to access and extract elements from a list in Python. 1. Indexing (Accessing Single Elements) Example 1: Basic Indexing python fruits = [“apple”, “banana”, “cherry”, “date”, “fig”] # Positive indexing print(fruits[0]) # “apple” (1st element) print(fruits[2]) # “cherry” (3rd element) # Negative indexing print(fruits[-1]) # “fig”…

  • difference between positional and keyword arguments

    1. Positional Arguments How they work: The arguments you pass are matched to the function’s parameters based solely on their order (i.e., their position). The first argument is assigned to the first parameter, the second to the second, and so on. Example: python def describe_pet(animal_type, pet_name): “””Display information about a pet.””” print(f”\nI have a {animal_type}.”) print(f”My {animal_type}’s name…

  • Linear vs. Scalar,Homogeneous vs. Heterogeneous 

    Linear vs. Scalar Data Types in Python In programming, data types can be categorized based on how they store and organize data. Two important classifications are scalar (atomic) types and linear (compound) types. 1. Scalar (Atomic) Data Types 2. Linear (Compound/Sequential) Data Types Key Differences Between Scalar and Linear Data Types Feature Scalar (Atomic) Linear (Compound) Stores Single…

  • circle,Rational Number

    1. What is a Rational Number? A rational number is any number that can be expressed as a fraction where both the numerator and the denominator are integers (whole numbers), and the denominator is not zero. The key idea is ratio. The word “rational” comes from the word “ratio.” General Form:a / b Examples: Non-Examples: 2. Formulas for Addition and Subtraction…

  • group() and groups()

    Python re group() and groups() Methods Explained The group() and groups() methods are used with match objects to extract captured groups from regex patterns. They work on the result of re.search(), re.match(), or re.finditer(). group() Method groups() Method Example 1: Basic Group Extraction python import retext = “John Doe, age 30, email: john.doe@email.com”# Pattern with multiple capture groupspattern = r'(\w+)\s+(\w+),\s+age\s+(\d+),\s+email:\s+([\w.]+@[\w.]+)’///The Pattern: r'(\w+)\s+(\w+),\s+age\s+(\d+),\s+email:\s+([\w.]+@[\w.]+)’Breakdown by Capture…

Leave a Reply

Your email address will not be published. Required fields are marked *