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

Moon no.email.here at zombo.com
Wed Aug 29 22:49:59 CEST 2007


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...



More information about the Python-list mailing list