@asmeurer , I'm not sure if this is a place where you think other.func should go, but that doesn't work here. I really want Rational. If I use other.func here and other is an Integer (for which isinstance(other, Rational) is True) then I will be converting the Float to an Integer (which is not what I want).  e.g. 2.6 % 2 should give 0.6, not 0, for an answer.