a class variable question
Pierre Quentel
quentel.pierre at wanadoo.fr
Wed Jun 28 03:27:58 EDT 2006
Erik Max Francis wrote:
> Note this only changes the attribute in the instance. If he wants it to
> be changed for all other instances, he needs to change it in the class
> with:: A._var1 = 1
Yes, but in the OP's code func1() is called by __init__ for every
instance - which in fact makes declaring _var1 as a class attribute
useless
Anyway, I find that changing the class attribute by calling a method on
an instance is a little confusing. I would rather set the class
attribute like this :
class A2:
_var1 = 0
def getvarValue(self):
return self._var1
a = A2()
print a.getvarValue()
>>> 0
A2._var1 = 0 # change class attribute
print a.getvarValue()
>>> 1
b = A2()
print b.getvarValue()
>>> 1
Or using a class method :
class A3:
_var1 = 0
@classmethod
def func1(cls):
cls._var1 = 1
def getvarValue(self):
return self._var1
a = A3()
print a.getvarValue()
>>> 0
A3.func1() # change class attribute
print a.getvarValue()
>>> 1
b = A3()
print b.getvarValue()
>>> 1
Pierre
More information about the Python-list
mailing list