Question re class variable

Steven D'Aprano steve at
Tue Sep 29 14:06:13 CEST 2015

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.


More information about the Python-list mailing list