 <p>When two objects have the same __array_priority__:</p> <pre><code>&gt;&gt;&gt; np.array([[1,0],[0,1]]).__array_priority__ 0.0 &gt;&gt;&gt; a.__array_priority__ 0.0 </code></pre> <p>And only one object's methods can be used, the tie is resolved by using the first array's/object's methods. (In your case __array_wrap__)</p> <p>From the question it seems like your class' methods should always be preferred, since they are the same (through inheritance) or overridden.</p> <p>So I would just crank up the __array_priority__. </p> <pre><code>class Template(np.ndarray): __array_priority__ = 1.0 (Or whichever value is high enough) ... </code></pre> <p>After you do this no matter where the template object is in a calculation. It's methods will be preferred over standard arrays' methods.</p>