<p>您需要定义<code>__array_wrap__</code>。见<a href="http://docs.scipy.org/doc/numpy/user/basics.subclassing.html#array-wrap-for-ufuncs" rel="nofollow">the documentation here</a>。在</p>
<p>作为一个使用示例的快速示例(但不需要<code>quantities</code>):</p>
<pre><code>class Numeric(object):
def __init__(self, signal):
self.signal = signal
def __array__(self):
return self.signal
def __mul__(self, obj):
return type(self)(self.signal.__mul__(obj))
def __rmul__(self, obj):
return type(self)(self.signal.__rmul__(obj))
import numpy as np
num = Numeric(np.arange(10))
n = np.arange(10)
print type(num * n)
print type(n * num)
</code></pre>
<p>这就产生了:</p>
^{pr2}$
<p>如果我们包括<code>__array_wrap__</code>:</p>
<pre><code>class Numeric(object):
def __init__(self, signal):
self.signal = signal
def __array__(self):
return self.signal
def __mul__(self, obj):
return type(self)(self.signal.__mul__(obj))
def __rmul__(self, obj):
return type(self)(self.signal.__rmul__(obj))
def __array_wrap__(self, out_arr, context=None):
return type(self)(out_arr)
import numpy as np
num = Numeric(np.arange(10))
n = np.arange(10)
print type(num * n)
print type(n * num)
</code></pre>
<p>它产生:</p>
<pre><code><class '__main__.Numeric'>
<class '__main__.Numeric'>
</code></pre>
<p>但是,我还是很困惑为什么你不能一开始就把<code>ndarray</code>子类化。。。我想从长远来看会干净很多。如果你不能,你就不能。在</p>
<p>要完全模仿<code>ndarray</code>而不子类化<code>ndarray</code>,您需要非常熟悉<a href="http://docs.scipy.org/doc/numpy/user/basics.subclassing.html" rel="nofollow">the details of subclassing them</a>。在</p>