所以我正在尝试做一个可以添加,减去和相乘的程序(由一个数量级和一个单位组成)。我加入了工作,但我还没弄清楚如何让rsub
和mult
工作。
我希望能够做类似的操作。 Volume * 2
或2 * Volume
.i.e:= Volume(10,"ml")
然后:2 * A
。
任何关于如何去做的建议将不胜感激! (奇怪的缩进是因为我在这里复制了我的代码并且它以一种奇怪的方式格式化)(我也没有包含is_valid,但我可以将它添加到此)。
def __init__ (self, m = 0, u = "ml"):
self.__magnitude = m
self.__units = u
def __add__ (self, v2): #adds to magnitude using an int or another volume
if Volume.is_valid(self):
if isinstance(v2, Volume):
if Volume.is_valid(v2): #check if V2 is valid
if self.__units == v2.__units:
return Volume(self.__magnitude + v2.__magnitude,
self.__units)
else:
if v2.__units == 'ml':
v3 = v2.customary()
return Volume(self.__magnitude + v3.__magnitude,
self.__units)
elif v2.__units == 'oz':
v3 = v2.__units
return Volume(self.__magnitude + v3.__magnitude,
self.__units)
elif isinstance(v2,(int,float)):
#create new Volume with same units as self
v3 = Volume(v2, self.__units)
return Volume(self.__magnitude + v3.__magnitude, self.__units)
def __radd__ (self, v2): #adds ability to do i.e. 2 + a
return self.__add__(v2)
def __sub__ (self, v2): #same as __add__ but this subtracts
if Volume.is_valid(self):
if isinstance(v2, Volume):
if Volume.is_valid(v2):
if self.__units == v2.__units:
return Volume(self.__magnitude - v2.__magnitude,
self.__units)
else:
if v2.__units == 'ml':
v3 = v2.customary()
return Volume(self.__magnitude - v3.__magnitude,
self.__units)
elif v2.__units == 'oz':
v3 = v2.__units
return Volume(self.__magnitude - v3.__magnitude,
self.__units)
elif isinstance(v2,(int,float)):
v3 = Volume(v2, self.__units)
return Volume(self.__magnitude - v3.__magnitude, self.__units)
def __rsub__ (self, v2):
return Volume(v2.__magnitude - self.__magnitude, self.__units)
def __mult__ (self, v2):#multiplies a volume by an int only (not other vol)
if Volume.is_valid(self):
if isinstance(v2, Volume):
if Volume.is_valid(v2):
if self.__units == v2.__units:
return Volume(self.__magnitude * v2.__magnitude,
self.__units)
else:
if v2.__units == 'ml':
v3 = v2.customary()
return Volume(self.__magnitude * v3.__magnitude,
self.__units)
elif v2.__units == 'oz':
v3 = v2.__units
return Volume(self.__magnitude * v3.__magnitude,
self.__units)
elif isinstance(v2,(int,float)):
v3 = Volume(v2, self.__units)
return Volume(self.__magnitude * v3.__magnitude, self.__units)
def __rmult__ (self, v2):
return self.__mult__(v2)
答案 0 :(得分:3)
使用__rmul__
代替__rmult___
和__mul__
代替__mult__