strange behaviour with keyword arguments and inheritance
matthewperpick
matthewperpick at gmail.com
Tue Apr 17 11:06:03 EDT 2007
cool .. thanks everyone. here is the aforementioned faq.
http://www.python.org/doc/faq/general/#why-are-default-values-shared-between-objects
On Apr 17, 5:16 am, Arnaud Delobelle <arno... at googlemail.com> wrote:
> matthewperpick wrote:
> > Check out this toy example that demonstrates some "strange" behaviour
> > with keyword arguments and inheritance.
>
> > =================================
>
> > class Parent:
> > def __init__(self, ary = []):
> > self.ary = ary
>
> [snip]
>
> As pointed out earlier, default values for arguments are evaluated
> when the function is defined, not when it is called. This creates
> confusion if this value is mutable and later mutated; I got confused
> by it when I started python. So it is often not a good idea to use
> mutable objects as default arguments.
>
> A simple fix:
>
> def __init__(self, ary=None):
> if ary is None: ary = []
> self.ary = ary
>
> --
> Arnaud
More information about the Python-list
mailing list