John Nagle wrote:
   Here's an obscure bit of Python semantics which
is close to being a bug:

>>> class t(object) :
...     classvar = 1
...
...     def fn1(self) :
...         print("fn1: classvar = %d" % (self.classvar,))
...         self.classvar = 2
...         print("fn1: classvar = %d" % (self.classvar,))

I don't think it's a bug.

None would name a class attribute and an instance attribute with the same name. So I'm assuming that you want to assign 2 to the *class* attribute (since it's named classvar :o) ).

You just did it wrong, self.classvar=2 creates the instance attribute classvar. This is easly fixed by using some well choosen coding rules:

when working with class attributes  within an instance either :

always write   t.classvar
or
always write   self.__class__.classvar

Problem solved. You could ask for python to reject self.classvar but that would break to OO lookup algo (== an instance has acces to its class attributes).

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

Reply via email to