Antoon Pardon wrote: > Would it be too much to ask that in a line like. > > x = x + 1. > > both x's would resolve to the same namespace?
They always do Antoon. There is no such issue for local (or global) varibles. The issue has to do with c.x = c.x + 1. In this case it's clearly designed and documented that this corresponds to: setattr(c, 'x', getattr(c, 'x') + 1) The result of these operations depends on e.g. how the __setattr__ and __getattr__ methods in the class in question are defined. You need to understand that the dot-operaterator always involves a lookup-operation that can be implemented in various ways. It's well defined that you can do things like: >>> class Counter: ... c=0 ... def __call__(self): ... self.c+=1 ... def __str__(self): ... return str(self.c) ... >>> c=Counter() >>> c() >>> print c 1 >>> c() >>> print c 2 >>> class C5(Counter): ... c=5 ... >>> c5=C5() >>> c5() >>> print c5 6 Of course, you could design a language, say Pythoon or Parthon, where this is illegal, and you force the programmer to do something longer such as: >>> class APCounter: ... c=0 ... def __init__(self): ... self.c = self.__class__.c ... def __call__(self): ... self.c+=1 ... def __str__(self): ... return str(self.c) ... I don't see this as an improvement though... -- http://mail.python.org/mailman/listinfo/python-list