python bug?

Christopher T King squirrel at WPI.EDU
Mon Jul 26 09:39:31 EDT 2004


On Mon, 26 Jul 2004, Anthony Petropoulos wrote:

> When running this simple code:
> -------
> class Dada:
>         a = []
>         def __init__(self, arg):
>                 self.a.append(arg)
> 
> d1 = Dada("pro")
> d2 = Dada("hoho")
> 
> print d1.a, d2.a
> ------------
> I get the output ['pro', 'hoho'] ['pro', 'hoho'], instead of what I
> expected: ['pro'] ['hoho'].

In your code, 'a' is initialized at the class level.  This means that it 
is only initialized once, when the class is first created.  Each time you 
instantiate a new object, it's using the same list bound to a.  To do what 
you want, you need to initialize 'a' for each object, rather than the 
class as a whole:

 class Dada:
         def __init__(self, arg):
                 self.a = []
                 self.a.append(arg)

 d1 = Dada("pro")
 d2 = Dada("hoho")
 
 print d1.a, d2.a	# -> ['pro'] ['hoho']




More information about the Python-list mailing list