Class Variable Access and Assignment

Antoon Pardon apardon at
Thu Nov 3 13:20:35 CET 2005

Op 2005-11-03, Stefan Arentz schreef <stefan.arentz at>:
> Antoon Pardon <apardon at> writes:
>> Op 2005-11-03, Steven D'Aprano schreef <steve at>:
>> >> There are two possible fixes, either by prohibiting instance variables
>> >> with the same name as class variables, which would allow any reference
>> >> to an instance of the class assign/read the value of the variable. Or
>> >> to only allow class variables to be accessed via the class name itself.
>> >
>> > There is also a third fix: understand Python's OO model, especially
>> > inheritance, so that normal behaviour no longer surprises you.
>> No matter wat the OO model is, I don't think the following code
>> exhibits sane behaviour:
>> class A:
>>   a = 1
>> b = A()
>> b.a += 2
>> print b.a
>> print A.a
>> Which results in
>> 3
>> 1
> I find it confusing at first, but I do understand what happens :-)

I understand what happens too, that doesn't make it sane behaviour.

> But really, what should be done different here?

I don't care what should be different. But a line with only one
referent to an object in it, shouldn't be referring to two different

In the line: b.a += 2, the b.a should be refering to the class variable
or the object variable but not both. So either it could raise an
attribute error or add two to the class variable.

Sure one could object to those sematics too, but IMO they are preferable
to what we have now.

Antoon Pardon

More information about the Python-list mailing list