Class initialization

Roald de Vries downaold at gmail.com
Sun Aug 8 16:38:34 CEST 2010


On Aug 8, 2010, at 4:14 PM, Costin Gament wrote:
> Thank you for your answer, but it seems I didn't make myself clear.

You could have been clearer in your first post, yeah.

> Take the code:
> class foo:
>  a = 0
>  b = 0
> c1 = foo()
> c1.a = 5
> c2 = foo()
> print c2.a
> 5
>
> Somehow, when I try to acces the 'a' variable in c2 it has the same
> value as the 'a' variable in c1. Am I missing something?

I can't reproduce this. Which version are you using?

> On Sun, Aug 8, 2010 at 4:59 PM, Roald de Vries <downaold at gmail.com>  
> wrote:
>>
>> Your problem probably is that a and b are class variables;

And class variables are not instance variables.

>> c1 and c2 are
>> different objects (in your terminology: they point to different  
>> instances).

I still suspect that this is the problem. In Python, classes are  
objects (instances of another class) too. In your class, you assign 0  
to the variables foo.a and foo.b.

>> See http://docs.python.org/tutorial/classes.html#class-objects for  
>> more
>> info.

So:

> class foo:
>  a = 0

creates a class variable foo.a and set it to 0

>  b = 0

creates a class variable foo.b and set it to 0

> c1 = foo()

creates a new foo that can be referenced as c1

> c1.a = 5

creates an instance variable c1.a and set it to 5

> c2 = foo()

creates a new foo that can be referenced as c2

> print c2.a

there is no instance variable c2.a, so the class variable foo.a is  
referenced

> 5


I get 0 here.

Cheers, Roald




More information about the Python-list mailing list