What is the reason for list.__str__
using __repr__
of its elements?
Example:
class Unit:
def __str__(self): return "unit"
def __repr__(self): return f"<unit id={id(self)}>"
>>> str(Unit())
'unit'
>>> str([Unit()])
'[<unit id=1491139133008>]'
CodePudding user response:
It's because list.__str__ is object.__str__
returns True
, and object.__str__
is basically implemented like:
def __str__(self):
return repr(self)
Unless a type implements its own __str__
, it uses object.__str__
.
Most builtin types in Python do not implement their own __str__
, because they do not have a logical choice for a human-friendly string representation, list
is no different.
CodePudding user response:
If lists used the str()
of their elements rather than their repr()
, then what would an output of [1, 2]
mean? Is that a list with two integers, two strings, or one of each? Or is it a list with one element, the string "1, 2"
? Python made the only choice that allows you to determine anything at all about the contents of a list by looking at its string representation.