The main difference between _str_ and _repr_ is:
_str_ is a built in container whereas _repr_ isn't
In case you override _repr_ it can also be used for _str_ but not vice versa.
_repr represents python object usually eval will convert it back to object whereas _str_ is everything we can think is that object in text form.
_repr_ is used to unambiguous whereas _str_ is readable.
Feel comfortable to comment any doubt.