Print an object as a String in Python

avatar

Borislav Hadzhiev

Last updated: Sep 8, 2022

banner

Photo from Unsplash

Print an object as a String in Python #

Use the __str__() method to print an object as a string. The __str__() method is called by str(object) and the built-in format() and print() functions and returns the informal string representation of the object.

main.py
class Employee(): def __init__(self, name, salary): self.name = name self.salary = salary def __str__(self): return f'Employee name: {self.name}' bobby = Employee('bobbyhadz', 100) # 👇️ print object as a string print(bobby) # 👉️ Employee name: bobbyhadz # 👇️ print object attributes and values as string print(str(bobby.__dict__)) # 👉️ {'name': 'bobbyhadz', 'salary': 100}

We defined the __str__() method on the class to change its string representation.

The __str__() method is called by str(object) and the built-in format() and print() functions and returns the informal string representation of the object.

If you just need to convert a value to a string, use the str() class.

main.py
num = 100 my_str = str(num) print(my_str) # 👉️ 100 print(repr(my_str)) # 👉️ '100'

If you need to print an object's attributes and values as a string, access its __dict__ attribute.

main.py
class Employee(): def __init__(self, name, salary): self.name = name self.salary = salary def __str__(self): return f'Employee name: {self.name}' bobby = Employee('bobbyhadz', 100) print(str(bobby.__dict__)) # 👉️ {'name': 'bobbyhadz', 'salary': 100}

The __dict__ attribute returns a dictionary containing the object's properties and values.

This dictionary can also be passed to the json.dumps() function if you need to convert the object to JSON.

main.py
import json class Employee(): def __init__(self, name, salary): self.name = name self.salary = salary def __str__(self): return f'Employee name: {self.name}' bobby = Employee('bobbyhadz', 100) json_str = json.dumps(bobby.__dict__) print(json_str) # 👉️ {"name": "bobbyhadz", "salary": 100}

The print() function returns the output of the class's __str__() method.

main.py
class Employee(): def __init__(self, name, salary): self.name = name self.salary = salary def __str__(self): return f'Employee name: {self.name}' bobby = Employee('bobbyhadz', 100) print(bobby) # 👉️ Employee name: bobbyhadz

Make sure to return a string from the __str__() method, otherwise a TypeError is raised.

For example, if we want to return the employee's salary from the __str__() method, we have to use the str() class to convert the value to a string.

main.py
class Employee(): def __init__(self, name, salary): self.name = name self.salary = salary def __str__(self): return str(self.salary) bobby = Employee('bobbyhadz', 100) print(bobby) # 👉️ '100'

The __str__() method is called if you use the object in a formatted string literal or with the str.format() method.

main.py
class Employee(): def __init__(self, name, salary): self.name = name self.salary = salary def __str__(self): return str(self.salary) bobby = Employee('bobbyhadz', 100) result = f'Salary: {bobby}' print(result) # 👉️ Salary: 100

The __str__() method should return a string that is a human-readable representation of the object.

There is also a __repr__() method that can be used in a similar way.

main.py
class Employee(): def __init__(self, name, salary): self.name = name self.salary = salary def __repr__(self): return self.name bobby = Employee('bobbyhadz', 100) print(bobby) # 👉️ 'bobbyhadz'

The __repr__ method is called by the repr() function and is usually used to get a string that can be used to rebuild the object using the eval() function.

If the class doesn't have the __str__() method defined, but has __repr__() defined, the output of __repr__() is used instead.

A good way to illustrate the difference between __str__() and __repr__() is to use the datetime.now() method.

main.py
import datetime # 👇️ using __str__() print(datetime.datetime.now()) # 👉️ 2022-09-08 13:52:04.055228 # 👇️ using __repr__() # 👉️ datetime.datetime(2022, 9, 8, 13, 52, 4, 55255) print(repr(datetime.datetime.now())) result = eval('datetime.datetime(2022, 9, 8, 13, 52, 4, 55255)') print(result) # 👉️ 2022-09-08 13:52:04.055255

When we used the print() function, the __str__() method in the datetime class got called and returned a human-readable representation of the date and time.

When we used the repr() function, the __repr__() method of the class got called and returned a string that can be used to recreate the same state of the object.

We passed the string to the eval() function and created a datetime object with the same state.

Note that implementing the __repr__() method in this way is not always necessary or possible.

Having the __str__() method return a human-readable string is sufficient most of the time.

I wrote a book in which I share everything I know about how to become a better, more efficient programmer.
book cover
You can use the search field on my Home Page to filter through all of my articles.