When I Am In The Python Or Ipython Console, What Is Called When I Am Returned An Output?
Solution 1:
When you inspect an object in that manner in a REPL, it invokes the object's __repr__
method. In comparison, print
uses the object's __str__
method. Example:
>>>classWidget:...def__repr__(self):...return"repr of a Widget"...def__str__(self):...return"str of a Widget"...>>>x = Widget()>>>x
repr of a Widget
>>>print(x)
str of a Widget
>>>print([x,2,3])
[repr of a Widget, 2, 3]
>>>print(repr(x))
repr of a Widget
>>>print(str(x))
str of a Widget
When defining __repr__
and __str__
for your own classes, try to follow the documentation's suggestions regarding which one should be more detailed and "official".
[
__repr__
computes] 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). ... [__str__
computes] the “informal” string representation of an object. The return value must be a string object. This method differs fromobject.__repr__()
in that there is no expectation that__str__()
return a valid Python expression: a more convenient or concise representation can be used.
Solution 2:
The other answer addresses repr
in a vanilla Python REPL, but it neglected to answer about IPython, which works quite differently and has many more features (and complexity) in regards to REPL printing.
Here's an example discrepancy:
# vanilla python:>>> type([])
<class'list'>
# in IPython:>>> type([])
list
IPython has a custom pretty printer and public hooks for customizing repr within IPython. One such hook is _repr_pretty_
(single underscores!) and here's a basic example:
>>>classWidget:...def__repr__(self):..."vanilla"...def_repr_pretty_(self, p, cycle):... p.text("chocolate, strawberry")...>>>Widget()
chocolate, strawberry
For more features, see "Integrating your objects with IPython" in the docs, in particular the Rich display section.
Post a Comment for "When I Am In The Python Or Ipython Console, What Is Called When I Am Returned An Output?"