Suppose I have two types of axis aligned rectangles:

a) Defined by left-up and right-bottom points: (x1, y1), (x2, y2)  

b) Defined by (x1, y1) and (width, height)

The aim is to create pythonic-way code, that allows for conversion between these types. E.g. if there is a function, that performs calculations only in one of the representations, it calls the necessary conversion on the given rectangle object first.

I can think of three ways of accomplishing that:

1. Create two classes inheriting from a base class. Create two "abstract" methods in the base for conversion to and back between a) and b) with a set of *isinstance* branches inside. Overload the methods in the inheriting classes, making empty methods for useless T -> T conversions.
2. Create a class with one static method, accepting two arguments, unrelated to a) and b)
3. Same as 2., but get rid of the class, just create a function in the global source file scope

Which one do you think is the best way, or may be there is something better?