[Tutor] __repr__ and __str__

Alan Gauld alan.gauld at btinternet.com
Tue Jun 30 14:33:33 CEST 2015


On 30/06/15 07:47, Marilyn Davis wrote:

> class MyList(list):
>      def __str__(self):
>          return """Here are your data:
>      %s
>      """ % list.__str__(self)
>
> def main():
>      a = MyList([1,2])
>      print a

> But if we add the special method:
>
>      def __repr__(self):
>          return "MyList(%s)" % (list.__str__(self))
>
> we get:
>
>    File "./stack2.py", line 10, in __str__
>      """ % list.__str__(self)
>    File "./stack2.py", line 5, in __repr__
>      return "MyList(%s)" % (list.__str__(self))
>    File "./stack2.py", line 5, in __repr__
>      return "MyList(%s)" % (list.__str__(self))
> RuntimeError: maximum recursion depth exceeded

> If a class defines __repr__() but not __str__(), then __repr__() is also
> used when an “informal” string representation of instances of that class
> is required.


My guess is that list.__str__ is calling self.__repr__
But you have defined your own self.__repr__ so it gets called and
it then calls list.__str__ again, and again and ....

Try replacing the call to list.__str__ with a call to list.__repr__
and see if that fixes things?

-- 
Alan G
Author of the Learn to Program web site
http://www.alan-g.me.uk/
http://www.amazon.com/author/alan_gauld
Follow my photo-blog on Flickr at:
http://www.flickr.com/photos/alangauldphotos




More information about the Tutor mailing list