def op_first(x, y): try: method = getattr(y, rmethod) except AttributeError: raise_no_methods(op, args=(x, y)) else: return method(x)
def op(x, y): out = getattr(x, method, lambda y: NotImplemented)(y) if out is NotImplemented: try: return getattr(y, rmethod)(x) except AttributeError: raise_unordered(op, args=(x, y)) raise_no_methods(op, args=(x, y))
def op(x, y): out = getattr(x, method, not_implemented)(y) if out is NotImplemented: try: return getattr(y, rmethod)(x) except AttributeError: raise_no_methods(op, args=(x, y)) return out
def op_second(x, y): out = getattr(x, method, not_implemented)(y) if out is NotImplemented: raise_no_methods(op, args=(x, y)) return out