[Numpy-discussion] subclassing ndaray
oliphant.travis at ieee.org
Fri Feb 24 17:41:14 EST 2006
Stefan van der Walt wrote:
>I see the same strange result. Here is a minimal code example to
>import numpy as N
> v = 0.
> def __new__(cls, *args, **kwargs):
> print "running new"
> return super(Bar, cls).__new__(cls, *args)
> def __init__(self, *args, **kwargs):
> print "running init"
> self[:] = 0
> self.v = 3
It's only strange if you have assumptions your not revealing. Here's
Neither the __init__ method nor the __new__ method are called for c = b+1.
So, your wondering how the Bar object got created then right? Well, it
got created as a subclass of ndarray in PyArray_NewFromDescr.
The __init__ and __new__ methods are not called because they may have
arbitrary signatures. Instead, the __array_finalize__ method is always
called. So, you should use that instead of __init__.
The __array_finalize__ method always receives the argument of the
Thus in your case.
def __array_finalize__(self, parent):
self.v = 3
would do what you want.
>In : b = Bar(3)
>In : b
>Out: Bar([0, 0, 0])
>In : b.v
>In : c = b+1
>In : c.v
>However, if I do b[:] = 1, everything works fine.
>On Fri, Feb 24, 2006 at 10:56:02AM -0500, Colin J. Williams wrote:
>>I have a subclass Bar, a 1-dim array which has some methods and some
>>attributes. One of the attributes is a view of the Bar to permit
>>Suppose that 'a' is an instance of 'Bar', which has a method 'show' and
>>a view attribute 'v'.
>>a ^ 15 returns a Bar instance, with its methods but without the attributes.
>>I am attempt to change this, Bar has a method __xor__, see below:
>> def __xor__(self, other):
>> ''' Exclusive or: __xor__(x, y) => x ^ y . '''
>> << this loops to the recursion limit
>> result= ArrayType.__xor__(self, other)
>> n= self.n
>> result.n= n
>> result.rowSize= self.rowSize
>> result.show= self.show
>> result.v= _n.reshape(result.view(), (n*n, n*n))
>> return result
>>Could anyone suggest a workaround please?
>This SF.Net email is sponsored by xPML, a groundbreaking scripting language
>that extends applications into web and mobile media. Attend the live webcast
>and join the prime developer group breaking into this new coding territory!
>Numpy-discussion mailing list
>Numpy-discussion at lists.sourceforge.net
More information about the NumPy-Discussion