Short, crazy example: list-derived class, with __iadd__

M

Moon

class Vec(list):
def __init__(self):
list.__init__(self, [0.0, 0.0])

def __iadd__(self, other):
assert isinstance(other, Vec)
self[0] += other[0]
self[1] += other[1]
print "right now, v is: ", self, " as you'd expect"


v = Vec()
w = Vec()
w[0] = 1.0
w[1] = 2.0
print "v starts:", v

print "(w is:", w, " which is fine)"

v += w

print "(w still is:", w

print "after iadd, v: ", v, " <-- becomes None! What the hey?"


# - running it:

py> python badvec.py
v starts: [0.0, 0.0]
(w is: [1.0, 2.0] which is fine)
right now, v is: [1.0, 2.0]
(w still is: [1.0, 2.0]
later, v is: None <-- becomes None! What the hey?

py> python -V
Python 2.5.1

-- Any explanation from a guru?

Thanks much...
 
M

Marshall T. Vandegrift

Moon said:
class Vec(list):
def __init__(self):
list.__init__(self, [0.0, 0.0])

def __iadd__(self, other):
assert isinstance(other, Vec)
self[0] += other[0]
self[1] += other[1]
print "right now, v is: ", self, " as you'd expect" return self


v = Vec()
w = Vec()
w[0] = 1.0
w[1] = 2.0
print "v starts:", v

print "(w is:", w, " which is fine)"

v += w

print "(w still is:", w
print "after iadd, v: ", v
# - running it:

v starts: [0.0, 0.0]
(w is: [1.0, 2.0] which is fine)
right now, v is: [1.0, 2.0] as you'd expect
(w still is: [1.0, 2.0]
after iadd, v: [1.0, 2.0]

-Marshall
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

No members online now.

Forum statistics

Threads
473,755
Messages
2,569,536
Members
45,007
Latest member
obedient dusk

Latest Threads

Top