On May 16, 2:24 am, Bruno Desthuilliers <bruno. [EMAIL PROTECTED]> wrote: > 7stud a écrit : > > > > > "When you bind (on either a class or an instance) an attribute whose > > name is not special...you affect only the __dict__ entry for the > > attribute(in the class or instance, respectively)." > > > In light of that statement, how would one explain the output of this > > code: > > > class Test(object): > > x = [1, 2] > > > def __init__(self): > > self.x[0] = 10 > > > print Test.__dict__ #{.....'x':[1,2]....} > > t = Test() > > print t.x #[10, 2] > > print t.__dict__ #{} > > print Test.__dict__ #{.....'x':[10,2]...} > > > It looks to me like self.x[0] is binding on an instance whose > > attribute name is not special, > > self.x[0] = 10 doesn't bind self.x - it's just syntactic sugar for > self.x.__setitem__(0, 10) (which itself is syntactic sugar for > list.__setitem__(self.x, 0, 10)) > > > yet it doesn't affect any __dict__ > > entry for the attribute in the instance > > Of course. The name 'x' is looked up in the instance, then in the class. > Since there's no binding (only a method call on a class attribute), > instance's dict is not affected.
Thanks. -- http://mail.python.org/mailman/listinfo/python-list