dasacc22 wrote: > Hi, > > I seem to be having a problem with a list being share across multiple > instantiations of it and dont quite understand why this is happening. > > My class looks like this, > > class Widget(object): > _parent = None > _children = [] > > def __init__(self, parent=None): > self.parent = parent > > @property > def children(self): > return self._children > > @property > def parent(self): > return self._parent > > @parent.setter > def parent(self, obj): > if obj: > obj._children.append(self) > self._parent = obj > > > now if i make instances and attach children like so > > a = Widget() > b = Widget(a) > c = Widget(a) > d = Widget(c) > > Basically all the objects end up sharing the _children list from `a` > instead of forming something like a tree. Any advice would be greatly > appreciated.
The problem stems from you confusing instance attributes with class attributes. You use a latter, which is shared amongst *all* instances of a given class. If you want instance-attributes, use def __init__(self, ..): self.children = [] also, your use of properties for the children is pointless in Python. Just use "children" as attribute name. Then, if at one fine day you want to do something more than just returning that value, you can still do that witout changing the interface by using a property - as you do so for parent. Diez -- http://mail.python.org/mailman/listinfo/python-list