✨ Magic Methods

Dunder Methods for Custom Behavior

Magic Methods (Dunder Methods)

Magic methods start and end with double underscores (__). They define how objects behave with built-in operations like +, len(), str().

💻 Common Magic Methods

class Book:
    def __init__(self, title, pages):
        self.title = title
        self.pages = pages
    
    def __str__(self):  # Human-readable string
        return f"{self.title} ({self.pages} pages)"
    
    def __repr__(self):  # Developer-friendly representation
        return f"Book('{self.title}', {self.pages})"
    
    def __len__(self):  # len(book)
        return self.pages
    
    def __eq__(self, other):  # book1 == book2
        return self.pages == other.pages

book = Book("Python Guide", 300)
print(str(book))     # Python Guide (300 pages)
print(len(book))     # 300
print(repr(book))    # Book('Python Guide', 300)

➕ Operator Overloading

class Vector:
    def __init__(self, x, y):
        self.x = x
        self.y = y
    
    def __add__(self, other):  # v1 + v2
        return Vector(self.x + other.x, self.y + other.y)
    
    def __mul__(self, scalar):  # v * 3
        return Vector(self.x * scalar, self.y * scalar)
    
    def __str__(self):
        return f"Vector({self.x}, {self.y})"

v1 = Vector(2, 3)
v2 = Vector(4, 1)
v3 = v1 + v2
print(v3)  # Vector(6, 4)
print(v1 * 2)  # Vector(4, 6)

🎯 Key Takeaways