I wrote this for you, but you can expand it as you like:
class Distance(object):
METER = 1
FOOT = 0.3048
MILE = 1609.344
INCH = 0.0254
UNITS = {'meters': METER,
'mts': METER,
'mt': METER,
'feet': FOOT,
'foot': FOOT,
'ft': FOOT,
'miles': MILE,
'mls': MILE,
'ml': MILE,
'inch': INCH,
}
def __init__(self, s):
self.number, unit = s.split()
self._convert(unit)
def _convert(self, unit):
self.number = float(self.number)
if self.UNITS[unit] != 1:
self.number *= self.UNITS[unit]
@ property
def meters(self):
return self.number
@ meters.setter
def meters(self, v):
self.number = float(v)
@ property
def miles(self):
return self.number / self.MILE
@ miles.setter
def miles(self, v):
self.number = v
self._convert('miles')
@ property
def feet(self):
return self.number / self.FOOT
@ feet.setter
def feet(self, v):
self.number = v
self._convert('feet')
@ property
def inch(self):
return self.number / self.INCH
@ inch.setter
def inch(self, v):
self.number = v
self._convert('inch')
Some examples:
>>> d = Distance('1302.09029321 mts')
>>> d.meters
1302.09029321
>>> d.feet
4271.949780872703
>>> d.inch
51263.39737047244
>>> d.miles
0.8090813978925575
>>> d.miles = 1
>>> d.meters
1609.344
>>> d.feet
5280.0
>>> d.inch = .0002
>>> d.inch
0.00019999999999999998
>>> d.feet
1.6666666666666664e-05
>>> d.meters
5.08e-06
>>> d.miles
3.156565656565656e-09
>>> d.feet = 1
>>> d.meters
0.3048
>>> d.miles
0.0001893939393939394
EDIT: Added setters