Magic/Dunder Methods

Learn about Python magic (dunder) methods like __init__, __str__, __len__, and __add__ to customize object behavior with examples.

Loading...
Magic/Dunder Methods

Magic methods (also called dunder methods, short for double underscore) are special methods in Python that let you customize how objects behave.

These methods are called automatically when specific operations are performed on objects.

Example 1: __init__ (Constructor)

class Book:
    def __init__(self, title, author):
        self.title = title
        self.author = author
 
# Create a Book object
book = Book("1984", "George Orwell")
 
# Print the book details
print(book.title, book.author)

Output:

1984 George Orwell

The __init__ method initializes the Book object with title and author.


Example 2: __str__ (String Representation)

class Book:
    def __init__(self, title, author):
        self.title = title
        self.author = author
 
    def __str__(self):
        return f"'{self.title}' by {self.author}"
 
# Create a Book object
book = Book("1984", "George Orwell")
 
print(book) # Calls __str__()

Output:

'1984' by George Orwell

The __str__ method provides a human-readable string representation of the Book object when printed.


Example 3: __len__ (Length)

class Box:
    def __init__(self, items):
        self.items = items
 
    def __len__(self):
        return len(self.items)
 
# Create a Box object
box = Box([1, 2, 3])
 
print(len(box)) # Calls __len__()

Output:

3

The __len__ method enables the use of len() to get the number of items in the Box object.


Example 4: __add__ (Operator Overloading)

class Point:
    def __init__(self, x, y):
        self.x = x
        self.y = y
 
    def __add__(self, other):
        return Point(self.x + other.x, self.y + other.y)
 
    def __str__(self):
        return f"({self.x}, {self.y})"
 
# Create two Point objects
p1 = Point(2, 3)
p2 = Point(4, 5)
 
p3 = p1 + p2 # Calls __add__()
print(p3)

Output:

(6, 8)

The __add__ method allows us to use the + operator to add two Point objects together.


Best Practices with Dunder Methods

  • Use them to make objects behave like built-in types (e.g., support len(), +, or print()).
  • Always implement a string method (__str__ or __repr__) for readability and debugging.
  • Don’t overuse them, only override when it makes sense.
  • Follow Python’s data model consistently (e.g., if you implement __eq__, consider __hash__).

👉 Next tutorial: Python Generators

Support my work!