logo

__str__ and __repr__

By default, printing an object shows something unhelpful like <Dog object at 0x...>. Define __str__ to fix this.

class Dog:
    def __init__(self, name):
        self.name = name

    def __str__(self):
        return f"Dog named {self.name}"

Now printing shows your custom message:

buddy = Dog("Buddy")
print(buddy)  # Dog named Buddy

__repr__ is for developers - it should show how to recreate the object:

def __repr__(self):
    return f"Dog('{self.name}')"

__str__ is for users, __repr__ is for debugging. If you only define one, define __repr__.

I explain magic methods in my Python OOP course.