[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