<p>当Python看到<code>x * y</code>时,会发生以下情况:</p>
<ul>
<li>如果<code>y</code>是<code>x</code>>;的子类,则调用<code>y.__rmul__(x)</code></li>
</ul>
<p>否则:</p>
<ul>
<li>^调用{<cd5>}</li>
</ul>
<p><strong>IF</strong><code>x.__mul__(y)</code>返回<code>NotImplemented</code>(这与<code>raise NotImplementedError</code>不同)</p>
<ul>
<li><code>y.__rmul__(x)</code>被调用</li>
</ul>
<p>因此,<code>__rmul__</code>可以被称为子类<code>ndarray</code>,或者{<cd11>}不能与{<cd13>}相乘。在</p>
<p>您无法子类化,而且显然<code>ndarray</code>很乐意与<code>Numeric</code>一起工作,所以<strong>。</strong></p>
<p>谢天谢地,<code>numpy</code>的人准备好了这样的情况答案在于<code>__array_wrap__</code>方法:</p>
<pre><code>def __array_wrap__(self, out_arr, context=None):
return type(self.signal)(out_arr, self.dimensionality)
</code></pre>
<p>我们使用原始的<code>signal</code>类和原始维度,为新的<code>Numeric</code>对象创建一个新信号。在</p>
<p>整个比特看起来像这样:</p>
^{pr2}$
<p>跑步时:</p>
<pre><code><class 'quantities.quantity.Quantity'> [1 4 9] mV**2
<class 'quantities.quantity.Quantity'> [ 2 6 12] mV**2
<class 'quantities.quantity.Quantity'> [ 3 8 15] mV
<class 'quantities.quantity.Quantity'> [ 2 6 12] mV**2
<class 'quantities.quantity.Quantity'> [ 3 8 15] mV
</code></pre>