What am i doing Wrong?

Aldo Cortesi aldo at nullcube.com
Wed Sep 21 02:32:52 EDT 2005


Thus spake keithlackey (keithlackey at deegroup.com):

>       class structure:
>             def __init__(self, folders = []):
                                ^^^^^^^^^^^^^

Here's your problem. To understand what's going on, you need to know two
things:

        - Default arguments are only evaluated ONCE when the
          Python interpreter executes the class definition.
        - A list is a mutable object.

So, what's happening is that both your class instances are
getting the _same_ list as a default instantiation argument.
You are modifying the list through the first class instance,
and then seeing the same change when you view the list via the
second class instance.

As a rule of thumb, simply never use a mutable object as a
default argument to a function or method unless you really
know what you're doing, and actually want the behaviour
you're going to get. In your case, you probably want
something like:

        def __init__(self, folders = None):
                if folders is None:
                        self.folders = []


Cheers,


Aldo

--
Aldo Cortesi
aldo at nullcube.com
http://www.nullcube.com
Off: (02) 9283 1131
Mob: 0419 492 863



More information about the Python-list mailing list