Short answer: Yes!
According to the Python docs (I highlighted the relevant part):
object.__str__(self)Called by str(object) and the built-in functions format() and print() to compute the “informal” or nicely printable string representation of an object. The return value must be a string object.
This method differs from
object.__repr__()in that there is no expectation that__str__()return a valid Python expression: a more convenient or concise representation can be used.The default implementation defined by the built-in type object calls
object.__repr__().
So your_instance.__str__ is generally called when you do str(your_instance).
Longer answer: With "Special Methods" (the methods with two leading underscores and two trailing underscores) there is an exception because these are looked up on the class, not the instance. So str(a) is actually type(a).__str__(a) and not a.__str__(). But in most cases these are the same, because one rarely overrides methods of the class on the instance. Especially not special methods.
See also the relevant documentation on "Special method lookup":
For custom classes, implicit invocations of special methods are only guaranteed to work correctly if defined on an object’s type, not in the object’s instance dictionary.
So like @zzh1996 pointed out in the comments the following code will use the method defined on the class even though the instance has a custom callable __str__ attribute:
>>> class A(object):
... def __str__(self):
... return 'a'
>>> instance = A()
>>> instance.__str__ = lambda: 'b'
>>> str(instance)
'a'
>>> instance.__str__()
'b'
Answer from MSeifert on Stack OverflowShort answer: Yes!
According to the Python docs (I highlighted the relevant part):
object.__str__(self)Called by str(object) and the built-in functions format() and print() to compute the “informal” or nicely printable string representation of an object. The return value must be a string object.
This method differs from
object.__repr__()in that there is no expectation that__str__()return a valid Python expression: a more convenient or concise representation can be used.The default implementation defined by the built-in type object calls
object.__repr__().
So your_instance.__str__ is generally called when you do str(your_instance).
Longer answer: With "Special Methods" (the methods with two leading underscores and two trailing underscores) there is an exception because these are looked up on the class, not the instance. So str(a) is actually type(a).__str__(a) and not a.__str__(). But in most cases these are the same, because one rarely overrides methods of the class on the instance. Especially not special methods.
See also the relevant documentation on "Special method lookup":
For custom classes, implicit invocations of special methods are only guaranteed to work correctly if defined on an object’s type, not in the object’s instance dictionary.
So like @zzh1996 pointed out in the comments the following code will use the method defined on the class even though the instance has a custom callable __str__ attribute:
>>> class A(object):
... def __str__(self):
... return 'a'
>>> instance = A()
>>> instance.__str__ = lambda: 'b'
>>> str(instance)
'a'
>>> instance.__str__()
'b'
Yes, it does. Take a look at the following example:
>>> class A:
... def __init__(self, a):
... self.a = a
... def __str__(self):
... print "Inside __str__"
... return self.a
...
>>>
>>> a = A('obj1')
>>> a
<__main__.A instance at 0x0000000002605548>
>>>
>>> a.__str__()
Inside __str__
'obj1'
>>>
>>> str(a)
Inside __str__
'obj1'
And, from __str__() documentation, we have:
object.__str__(self)Called by
str(object)and the built-in functionsformat()andprint()to compute the “informal” or nicely printable string representation of an object. The return value must be a string object.
What does __str__ method do?
python - How to use __str__ function to return a string representation of a class - Stack Overflow
python - Calling str method in classes - Stack Overflow
In what cases do you use the str() function?
I'm still a beginner in python and my English is not really good, so I may have a little bit of understanding the explanation given in my course.
So I have this code:
class Apple:
def __init__ (self,color,flavor):
self.color=color
self.flavor=flavor
def __str__(self):
return "This apple is {} and its flavor is {}".format(self.name,self.flavor)
jonagold=Apple("red","sweet")
print(jonagold)The only purpose I see in using the __str__ method, I don't have to write the method in the print () line. If I changed the __str__ method with:
def say(self):
return "This apple is {} and its flavor is {}".format(self.name,self.flavor)I would just need to type
print(jonagold.say())
And I would get the same answer. What are the other purpose of using __str__? In what situation would I need to use the __str__?
Thank you :)
Title. I know you use it for integers, but in what context? Also, is it used for anything else?