How to apply __str__ function when printing a list of objects in Python

Well this interactive python console snippet will tell everything:

>>> class Test:
...     def __str__(self):
...         return 'asd'
...
>>> t = Test()
>>> print(t)
asd
>>> l = [Test(), Test(), Test()]
>>> print(l)
[__main__.Test instance at 0x00CBC1E8, __main__.Test instance at 0x00CBC260,
 __main__.Test instance at 0x00CBC238]

Basically I would like to get three asd string printed when I print the list. I have also tried pprint but it gives the same results.

Answers:

Thank you for visiting the Q&A section on Magenaut. Please note that all the answers may not help you solve the issue immediately. So please treat them as advisements. If you found the post helpful (or not), leave a comment & I’ll get back to you as soon as possible.

Method 1

Try:

class Test:
   def __repr__(self):
       return 'asd'

And read this documentation link:

Method 2

The suggestion in other answers to implement __repr__ is definitely one possibility. If that’s unfeasible for whatever reason (existing type, __repr__ needed for reasons other than aesthetic, etc), then just do

print [str(x) for x in l]

or, as some are sure to suggest, map(str, l) (just a bit more compact).

Method 3

You need to make a __repr__ method:

>>> class Test:
    def __str__(self):
        return 'asd'
    def __repr__(self):
        return 'zxcv'

    
>>> [Test(), Test()]
[zxcv, zxcv]
>>> print _
[zxcv, zxcv]

Refer to the docs:

object.__repr__(self)

Called by the repr() built-in function and by string conversions (reverse quotes) to compute the “official” string representation of an object. If at all possible, this should look like a valid Python expression that could be used to recreate an object with the same value (given an appropriate environment). If this is not possible, a string of the form <...some useful description...> should be returned. The return value must be a string object. If a class defines __repr__() but not __str__(), then __repr__() is also used when an “informal” string representation of instances of that class is required.

This is typically used for debugging, so it is important that the representation is information-rich and unambiguous.


All methods was sourced from stackoverflow.com or stackexchange.com, is licensed under cc by-sa 2.5, cc by-sa 3.0 and cc by-sa 4.0

0 0 votes
Article Rating
Subscribe
Notify of
guest

0 Comments
Oldest
Newest Most Voted
Inline Feedbacks
View all comments
0
Would love your thoughts, please comment.x
()
x