 <p>Two problems here</p> <ol> <li><p>In your <code>__mul__</code> implementation of <code>MyFloatExt</code> you're never checking if <code>other</code> is an instance of <code>MyFloatExt</code></p></li> <li><p><code>isinstance(e, MyFloat)</code> will always be true, because <code>MyFloatExt</code> inherits from <code>MyFloat</code></p></li> </ol> <p>To fix it: </p> <pre><code>def __mul__(self, other): # check if we deal with a MyFloatExt instance if isinstance(other, MyFloatExt): return MyFloatExt(self.a * other.a) if type(other) == (int, long, float): return MyFloatExt(self.a * other) else: return MyFloat.__mul__(self, other) # do the correct check print isinstance(e, MyFloatExt) </code></pre>