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. -- http://mail.python.org/mailman/listinfo/python-list