The __str__
method in Python represents the class objects as a string – it can be used for classes. The __str__
method should be defined in a way that is easy to read and outputs all the members of the class. This method is also used as a debugging tool when the members of a class need to be checked.
The __str__
method is called when the following functions are invoked on the object and return a string:
print()
methodstr()
methodIf we have not defined the __str__
, then it will call the __repr__
method. The __repr__
method returns a string that describes the pointer of the object by default (if the programmer does not define it).
__str__
methodLet’s explore different ways to call the __str__
method.
The following code explains the default implementation of the __str__
method.
class MyClass:x = 0y = ""def __init__(self, anyNumber, anyString):self.x = anyNumberself.y = anyStringmyObject = MyClass(12345, "Hello")print(myObject.__str__())print(myObject.__repr__())print(myObject)
The above code shows an example where neither __str__
nor __repr__
are defined. Calling __str__
calls the default __repr__
method, and they all give the same output, the pointer of our object.
__str__
methodThe following code explains how the custom __str__
method works.
class MyClass:x = 0y = ""def __init__(self, anyNumber, anyString):self.x = anyNumberself.y = anyStringdef __str__ (self):return 'MyClass(x=' + str(self.x) + ' ,y=' + self.y + ')'myObject = MyClass(12345, "Hello")print(myObject.__str__())print(myObject)print(str(myObject))print(myObject.__repr__())
The code above shows the output once you have defined the __str__
method. When __str__
, print()
, or str()
are called you will get your defined output. Make note that the __repr__
output remains the same.
__repr__
method defined onlyLet’s see the example of the __repr__
method defined only.
class MyClass:x = 0y = ""def __init__(self, anyNumber, anyString):self.x = anyNumberself.y = anyStringdef __repr__ (self):return 'MyClass(x=' + str(self.x) + ' ,y=' + self.y + ')'myObject = MyClass(12345, "Hello")print(myObject.__str__())print(myObject)print(str(myObject))print(myObject.__repr__())
In the first example we saw that when __str__
is not defined it automatically calls the __repr__
method. Therefore, the output of all the functions - __str__
, str()
, and __repr__
- are the same. Moreover, the __repr__
method does not necessarily need to return a string. In case it does not return a string, the print()
statements will throw an error.