13 Project Ideas for Intermediate Python Developers

Pythonic OOP String Conversion: __repr__ vs __str__

Dan Bader

Dan Bader 7 Lessons 13m
intermediate python

In this tutorial series you’ll do a deep dive on how Python’s to-string conversion using the __repr__ and __str__ “magic methods” works and how you can add implement them in your own classes and objects.

When you define a custom class in Python and then try to print one of its instances to the console (or inspect it in an interpreter session) you get a relatively unsatisfying result. The default “to string” conversion behavior is basic and lacking in detail.

By default all you get is a string containing the class name and the id of the object instance (which is the object’s memory address in CPython). That’s better than nothing, but it’s also not very useful.

The solution here is adding the __str__ and __repr__ “dunder” methods (some call them “magic methods”) to your class.

They are the Pythonic way to control how objects are converted to strings in different situations.

In this tutorial series I’ll do a deep dive on how Python’s to-string conversion works and how you can add it to your own custom classes.

I’ll walk you through the __str__ and __repr__ methods, when to use each, and some tips on how to use them in real world scenarios.

Just remember:

  • The result of __str__ should be readable.

  • The result of __repr__ should be unambiguous.

  • Always add a __repr__ to your classes. The default implementation for __str__ just calls __repr__, so you get the best of both worlds.

About Dan Bader

Dan Bader

Dan is the Chief Python Nut at Real Python. He helps Python developers take their coding skills to the next level with Python tutorials, books, and online training.

» More about Dan

Each tutorial at Real Python is created by a team of developers so that it meets our high quality standards. The team members who worked on this tutorial are:

« Browse All Courses