[Numpy-discussion] numarray unfriendly to user defined types
Tim Hochberg
tim.hochberg at ieee.org
Mon Sep 22 16:28:04 EDT 2003
Fernando Perez wrote:
> Tim Hochberg wrote:
>
>> I agree that using try/except is probably not worth the danger.
>> However, I think I'd prefer the inverse of what you propose. That is:
>>
>> def __mul__(self, operand):
>> if isinstance(operand, _numarray_nondeferred_types):
>> self.__mul__(operand)
>> else:
>> operand.__rmul__(self)
>>
>>
>> and of course a dont_defer_to registration function. Hopefully with a
>> better name. The choice comes down to whether we defer by default or
>> handle by default. I'm marginally on the side of deferring, but don't
>> feel too strongly either way. Either one would be a big improvement.
>>
>> Perhaps someone else out there has some profound thoughts.
>
>
> Well, certainly not profound, but here's my proverbial $0.02. I tend
> to really dislike separate registration functions, since they reek too
> much of 'programming by side-effect'. Why not put the necessary
> information into a keyword argument to the constructor? Once a
> sensible default is chosen, then it can be overridden with
> 'defers=True' (if the default was False) at __init__ time, for
> example. Since this is a class-wide issue, perhaps it may make more
> sense to handle it via a meta-class mechanism. But I'm not an expert
> on metaclasses, so I'll shut up there :)
I actually have no idea how you plan to make keyword arguments work
here, perhaps you could explain that in more detail. Metaclasses are
overkill, but a mixin, marker class could be used. That is, when
designing a class for use with numarray, one would derive a class from a
marker class in numarray::
class MyArrayLikeClass(numarray.DeferToMe):
....
Hmmm. That's not too bad. Todd, what do you think about using this logic::
def __mul__(self, operand):
if isinstance(operand, DeferToMe):
operand.__rmul__(self)
else:
self.__mul__(operand)
The only case where I see a potential problem is an old-style
C-extenstion that can't be subclassed. I think that might be a case of
YAGNI though. Avoiding registration is appealing.
-tim
More information about the NumPy-Discussion
mailing list