Unexpected return value from __add__
Magnus Lycka
magnus at thinkware.se
Tue Sep 25 19:34:55 EDT 2001
Thank's Piet and Marc, as usual bugs are trivial once
you find them... :)
piet at cs.uu.nl wrote:
>
> >>>>> Magnus Lycka <magnus at thinkware.se> (ML) writes:
>
> ML> The code below puzzles me. Am I just blind, or is there something
> ML> really strange here...
>
> ML> The code below is a small test case for the problem. Don't
> ML> expect it to make any sense... Anyway, I have an IP address
> ML> stored as a long, and presented as '192.0.1.1' etc. I have
> ML> an __add__ method where I can add an integer value to an IP
> ML> address, so that I ought to get:
>
> >>>> a = IPAddr((192,0,0,0))
> >>>> b = a + 257
> >>>> print b
> ML> 192.0.1.1
>
> ML> What actually happens is that I get an object of the right
> ML> class back, but not with the right value. The internal long
> ML> has the value 0! But if I remove the # in __add__, I see a
> ML> printout of just the value I expected! Somehow it seems to
> ML> get lost when I return it! Some strange scope thingie???
>
> ML> def __str__(self):
> ML> res = []
> ML> while self.addr:
> ML> self.addr, digit = divmod(self.addr,256)
>
> Your __str__ modifies self.addr and thus destroys the value (until it is 0)
> --
> Piet van Oostrum <piet at cs.uu.nl>
> URL: http://www.cs.uu.nl/~piet [PGP]
> Private email: P.van.Oostrum at hccnet.nl
--
Magnus Lyckå | Älvans väg 99 | magnus at thinkware.se | tel: 070-582 80 65
Thinkware AB | 907 50 UMEÅ | www.thinkware.se | fax: 070-612 80 65
More information about the Python-list
mailing list