注意:这不是一个确定的答案。请将其视为如何构建与您所要求的类似的东西的示例。使用Unum
模块确实是一个更好的主意,除非它不符合您的需要。
您可以自己编写一些东西,像这样重载运算符:
>>> class Unit(object):
def __init__(self, unit_name):
self.unit_name = unit_name
self.unit_qty = 1
def __div__(self, other):
result = self.__class__(self.unit_name)
result.unit_qty = self.unit_qty / other
return result
def __rdiv__(self, other):
result = self.__class__(self.unit_name)
result.unit_qty = other / self.unit_qty
return result
def __mul__(self, other):
result = self.__class__(self.unit_name)
result.unit_qty = self.unit_qty * other
return result
def __rmul__(self, other):
return self.__mul__(other)
def __repr__(self):
return '%s %s' % (self.unit_qty, self.unit_name)
>>> kg = Unit('kg')
>>> 100 * kg
100 kg
>>> 100 * 10 * kg
1000 kg
>>> (10 * 20 * kg) / 2
100 kg
然后你可以用它eval()
来评估表达式(如“ 100*kg
”),但要小心。可能这应该可以帮助您摆脱一些问题:
eval('100*kg', {'__builtins__': {}, 'kg': Unit('kg')})