To answer my own question, the error is caused by the __setattr__
defined in UserArray:
def __setattr__(self,attr,value):
if attr=='shape':
self.array.shape=value
self.__dict__[attr]=value
I'm not sure though how to "undefine" __setattr__ in a subclass so that
property lookup works correctly. The furthest I got was to remove
__setattr__ from UserArray, but this is obviously unsafe if UserArray
is going to be used alone:
delattr(UserArray,'__setattr__')
class Vector(UserArray,object):
def __init__(self,x,y):
UserArray.__init__(self, (x,y))
shape = property(lambda self: self.array.shape,
lambda self,v: setattr(self.array,'shape',v))
magnitude = property(lambda self: hypot(*self),
# setting scales the vector
lambda self,magnitude: self.__imul__(magnitude/self.magnitude))
Any alternatives to get the same effect without deleting an attribute
of the superclass ?
George
--
http://mail.python.org/mailman/listinfo/python-list