hi,
this is an annoying behavior, I’m having a lot of bug because my class variables change even if I didn’t assign a value to them directly.
for instance,
class character:
def __init__(self):
self.life = 3
self.magic = self.life
self.jump = self.magic
def setJump(self, value):
self.jump = value
def getLife(self):
return self.life
if I insert setJump(5) , life and magic store 5 too, it seems that was created only one variable.
self.life = self.magic = self.jump = 3
this solved my problem and seems to create 3 different variables.
But now every time I assign a class variable to a variable and I change the value of the variable, the class variable changes as well
myVariable = character.getLife()
myVariable = 10
this prints:
myVariable = 10
character.life = 10
myVariable = character.getLife() + 0
myVariable += 10
it is the only way that works perfectly
myVariable = 13
character.life = 3
I will get crazy, why python is tricking me?
please help me
Enge
January 12, 2010, 7:53pm
2
I’m no Python programmer, but
def getLife(self):
return value
shouln’t that be return self.life ??
he had value defined on top. So the getLife returns the top level socope value, same value he is setting.
Enge
January 12, 2010, 8:07pm
4
Argh… strange language… I will not enter the dangerous world of answering Python questions any more
drwr
January 12, 2010, 8:25pm
5
No, you gave the correct answer. getLife() should indeed be returning self.life, not value. The fact that it was returning value is exactly why it was behaving strangely.
David
Enge
January 12, 2010, 8:28pm
6
Thanks, I feel much better now
my mistake,
it indeed returns self.life
is this solved now or are you still confused about class- and instance attributes?
I don’t know whether your problem is something like this:
python.org/doc/essays/ppt/sd … sld016.htm
sometimes python language kinda strange on assigning object, beware its says
zephyro
January 13, 2010, 4:02pm
10
nemesis#13 I am still a bit confused
bear_form that is exactly what is happening,
I want to create, for instance, a new int object by referencing
x = y
and not make x reference the object y references, how can I avoid this?
Hypnos
January 13, 2010, 5:10pm
11
you should be aware that python handles int and float a bit differently to lists.
>>> a = b = 1
>>> a += 1
>>> a, b
(2, 1)
>>> a = b = [1]
>>> a += [1]
>>> a, b
([1, 1], [1, 1])
so variables to lists are pointers.
to copy a list use
a = b[:]
edit: oh i didnt read the link posted by bear_form posted… so this may be bogus
so what exactly is the problem?
from the first post i guess it’s confusion about class- and instance variables. this little website might help you in this case: gaijin.dmst.aueb.gr/~bkarak/webl … 12007.html