Unclear On Class Variables

harold fellermann harold.fellermann at upf.edu
Thu Jan 13 07:45:36 EST 2005


Hi Tim,

If you have

class Foo(object) :
	x = 0
	y = 1

foo = Foo()

foo.x # reads either instance or class attribute (class in this case)

foo.x = val # sets an instance attribute (because foo is instance not  
class)

Foo.x = val           # sets a class attribute
foo.__class.__x = val # does the same

this might be sometimes confusing. IMHO, the following is especially  
nasty:

 >>> foo = Foo()
 >>> foo.x += 1
 >>>
 >>> print foo.x
1
 >>> print Foo.x
0

although the += operator looks like an inplace add it isn't.
it is just syntactic sugar for foo.x = foo.x + 1.


- harold -


On 13.01.2005, at 07:18, Tim Daneliuk wrote:

> I am a bit confused.  I was under the impression that:
>
> class foo(object):
> 	x = 0
> 	y = 1
>
> means that x and y are variables shared by all instances of a class.
> But when I run this against two instances of foo, and set the values
> of x and y, they are indeed unique to the *instance* rather than the
> class.
>
> It is late and I am probably missing the obvious.  Enlightenment  
> appreciated ...
> --  
> ----------------------------------------------------------------------- 
> -----
> Tim Daneliuk     tundra at tundraware.com
> PGP Key:         http://www.tundraware.com/PGP/
> -- 
> http://mail.python.org/mailman/listinfo/python-list
>
>
--
Everyone is a genius.
It's just that some people are too stupid to realize it.




More information about the Python-list mailing list