Python Dunder Functions: What They Are and How to Use Them
Tags: python, productivity, programming, tutorial
Published: 2023-03-11 13:27:19

Dunder functions are special methods in Python that begin and end with a double underscore (e.g. init, str). They are also known as magic methods or special methods. In this post, we'll explore what dunder functions are, what they're used for, and how to use them in your Python code.

## What Are Dunder Functions?

Dunder functions are pre-defined methods in Python that have special meanings. They are called "dunder" functions because their names begin and end with double underscores (i.e. "__"). These functions are also called magic methods because they allow Python classes to emulate built-in types and perform various operations, such as object initialization, comparison, and iteration.

Dunder functions are not called directly like regular methods. Instead, they are invoked implicitly by Python in response to certain events or operators. For example, the str method is called when you use the str() function on an object, or when you use the print() function to output the object.

## How to Use Dunder Functions

To use a dunder function, you simply define it in your Python class. Here's an example of a class with a str method:

```python
class Person:
    def __init__(self, name, age):
        self.name = name
        self.age = age
    
    def __str__(self):
        return f"{self.name}, {self.age} years old"

```
In this example, we define a Person class with an init method that initializes the name and age attributes, and a str method that returns a string representation of the object. To use this class, we can create instances of it and then print them:



```python
p1 = Person("Alice", 25)
p2 = Person("Bob", 30)

print(p1) # Output: Alice, 25 years old
print(p2) # Output: Bob, 30 years old

```

When we print the Person objects, Python calls the str method implicitly to get their string representation.

Here are some other common dunder functions and their uses:


    `__init__`: Initializes an object when it is created. This method is called immediately after an object is created and allows you to set the initial values for the object's attributes.

    `__eq__`: Defines the behavior of the == operator. This method is called when you use the == operator to compare two objects of the same class.

    `__lt__`: Defines the behavior of the < operator. This method is called when you use the < operator to compare two objects of the same class.

    `__len__`: Returns the length of the object. This method is called when you use the len() function on an object.

    `__repr__`: Returns a string representation of the object that can be used to recreate it. This method is called when you use the `repr()` function on an object.


You can define other dunder functions in your classes as well, depending on your needs. For example, you can define a add method to specify the behavior of the + operator for your class.

## Benefits of Dunder Functions

Using dunder functions can make your code more concise and easier to read, as well as more powerful and flexible. By defining these special methods, you can make your classes behave like built-in types, and you can control how they respond to operators and events. This can make your code more intuitive and easier to use.

## Conclusion

Dunder functions are a powerful feature of Python that allow you to customize.