Bug in __init__?

Eduardo O. Padoan eduardo.padoan at gmail.com
Fri Jan 18 12:20:55 EST 2008


On Jan 18, 2008 3:09 PM, Zbigniew Braniecki
<zbigniew.braniecki at gmail.com> wrote:
> I found a bug in my code today, and spent an hour trying to locate it
> and then minimize the testcase.
>
> Once I did it, I'm still confused about the behavior and I could not
> find any reference to this behavior in docs.
>
> testcase:
>
> class A():
>
>    def add (self, el):
>      self.lst.extend(el)
>
>    def __init__ (self, val=[]):
>      print val
>      self.lst = val
>
>
> def test ():
>    x = A()
>    x.add(["foo1","foo2"])
>    b = A()
>
>
> So, what I would expect here is that I will create two instances of
> class A with empty self.lst property. Right?
>
> In fact (at least with my Python 2.5)
>
> gandalf at gandalf-desktop:~/projects/pyl10n$ ./scripts/test.py
> []
> ['foo1', 'foo2']
>
> This bug does not happen when I switch to __init__ (self, *args) and
> assign self.lst= args[0].
>
> Any clue on what's going on here, and/if where I should report it?

It is a FAQ, not a bug:
http://www.python.org/doc/faq/general/#why-are-default-values-shared-between-objects
http://effbot.org/pyfaq/why-are-default-values-shared-between-objects.htm

-- 
http://www.advogato.org/person/eopadoan/
Bookmarks: http://del.icio.us/edcrypt



More information about the Python-list mailing list