On Tue, 29 Sep 2015 09:17 pm, Anssi Saari wrote: [...] >> The problem is that in python you can't change a class variable through >> an instance. The moment you try, you create an instance attribute. > > That much is clear but why does his other version of __gen_id() work > (after a fashion)? It doesn't increment the class variable but the > instances get an incremental id. > > The function was like this: > > def __gen_id(self): > ty = self.__class__.__name__ > id = '' > while id in self.__instance_registry: > id = '%s_%d' % (ty, self.__instance_counter) > self.__instance_counter += 1 > self.__instance_registry[id] = self > return id
This works because it doesn't assign to self.__instance_registry itself, it assigns to an item within the existing self.__instance_registry. So the registry object (a dict?) gets modified in place, not re-bound or shadowed by an instance attribute of the same name. -- Steven -- https://mail.python.org/mailman/listinfo/python-list