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
- __init__: Constructor
- __str__: String representation (print)
- __repr__: Official representation
- __len__: len() function
- __eq__: Equality comparison (==)
- __add__: Addition operator (+)
- __getitem__: Index access (obj[i])