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.

What it actually does is define names with the given values *in the class namespace*.


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.

I imagine here you are setting instance variables, which then *mask* the presence of class variables with the same name, because "self-relative" name resolution looks in the instance namespace before it looks in the class namespace.

It is late and I am probably missing the obvious. Enlightenment appreciated ...

You can refer to class variables using the class name explicitly, both within methods and externally:


 >>> class X:
 ...   count = 0
 ...   def getCt(self):
 ...     return self.count
 ...   def inc(self):
 ...     self.count += 1
 ...
 >>> x1 = X()
 >>> x2 = X()
 >>> id(x1.count)
168378284
 >>> x1.inc()
 >>> id(x1.count)
168378272
 >>> id(x2.count)
168378284
 >>> id(X.count)
168378284
 >>> x1.getCt()
1
 >>> x2.getCt()
0
 >>>

regards
 Steve
--
Steve Holden               http://www.holdenweb.com/
Python Web Programming  http://pydish.holdenweb.com/
Holden Web LLC      +1 703 861 4237  +1 800 494 3119

--
http://mail.python.org/mailman/listinfo/python-list

Reply via email to