Magic methods in Python, also often referred to as dunder methods, are special methods that you can define to add "magic" to your classes. They're the key to unlocking elegant, rich, and intuitive interfaces for your Python objects. They provide a simple way to make objects behave like built-in ones, thereby ensuring a consistent and pythonic code style.
The name magic methods come from the fact that they begin and end with double underscore symbols, for example, __init__
or __str__
. This "double underscore" notation is why they are also sometimes referred to as "dunder" methods (Double UNDERscore).
Let's take a look at some practical examples:
__init__
and __str__
Magic MethodsThe __init__
method in Python represents a constructor which initializes an object upon its creation, while the __str__
method enables us to represent the object as a string.
class Person:
def __init__(self, name, age):
self.name = name
self.age = age
def __str__(self):
return f"Person(name={self.name}, age={self.age})"
person = Person("John", 28)
print(person) # Output: Person(name=John, age=28)
__len__
and __getitem__
Magic MethodsThe __len__
method allows us to use the len()
function on our class, and the __getitem__
method makes our class support element access.
class EmployeeList:
def __init__(self, employees):
self.employees = employees
def __len__(self):
return len(self.employees)
def __getitem__(self, position):
return self.employees[position]
employee_list = EmployeeList(["Martin", "Joan", "Esther"])
print(len(employee_list)) # Output: 3
print(employee_list[1]) # Output: Joan
These examples are just the tip of the iceberg, and there are many more magic methods available in Python. These special methods enable a more intuitive and pythonic programming style, and understanding how to effectively use these methods will positively impact your Python programming skills. Remember that these methods should not be called directly but are meant to be invoked indirectly by other parts of your code.