How to apply __str__ function when printing a list of objects in Python
Solution 1
Try:
class Test:
def __repr__(self):
return 'asd'
And read this documentation link:
Solution 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).
Solution 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.
Related videos on Youtube
dvim
Updated on November 14, 2020Comments
-
dvim over 3 years
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 triedpprint
but it gives the same results. -
dvim almost 14 yearsFrom the documentation provided in the answer, it seems that I do not need str definition if repr is used. Thank you for your input.
-
Ralph Sinsuat almost 14 years@Blink_: It depends on what exactly you want. Using the class I have defined, compare the output of
print Test()
againstprint [Test()]
.