Class Variable Access and Assignment

Antoon Pardon apardon at forel.vub.ac.be
Thu Nov 3 10:02:24 EST 2005


Op 2005-11-03, Stefan Arentz schreef <stefan.arentz at gmail.com>:
> Antoon Pardon <apardon at forel.vub.ac.be> writes:
>
> ...
>
>> Fine, we have the code:
>> 
>>   b.a += 2
>> 
>> We found the class variable, because there is no instance variable,
>> then why is the class variable not incremented by two now?
>
> Because it really is executed as:
>
>  b.a = b.a + 2

That is an explanation, not a reason. 

>   1. get 't'b.a and store it in a temporary 't' (found the instance)
>   2. add 2 to 't'
>   3. store 't' in 'b.a'
>
> The last operation stores it into an instance variable.

[ I think you mean '(found the class variable)' in line 1 ]

All you are doing here is explain how the current implemantation treats
this. You are not giving arguments for why the result of this
implementation should be considered sane behaviour.

>> > Remember, Python is a dynamic language.
>> 
>> So? Python being a dynamic language doesn't prevent the following to fail:
>> 
>> >>> a=1
>> >>> def f():
>> ...   a += 2
>> ... 
>> >>> f()
>> Traceback (most recent call last):
>>   File "<stdin>", line 1, in ?
>>   File "<stdin>", line 2, in f
>> UnboundLocalError: local variable 'a' referenced before assignment
>
> See the 'global' keyword.

You missed the point. If python being a dynamic language would be the
answer to the interaction between instance and class variable, why
then is the interaction between local and global variable different,
why wouldn't the f code be executed as follows

  1. get a and store in in a temporary 't' (found the global)
  2. add 2 to 't'
  3. store 't' in 'a'

The last operation storing it in f's local namespace.

-- 
Antoon Pardon



More information about the Python-list mailing list