我有一个类foo
,它本质上是一个浮点数,附加了一些额外的属性。我可以覆盖它的__sub__
方法,这样我就可以减去一个方向,但我无法弄清楚如何以另一种方式去做:
class foo():
def __init__(self, value, otherstuff):
self.value = value
self.otherstuff = otherstuff
def __sub__(self, other):
return self.value - other
a = 5
b = foo(12, 'blue')
print b-a # this works fine and returns 7
print a-b # I want this to return -7 but it obviously doesn't work
有办法做到这一点吗?
add,sub,mul,div的一般解决方案是理想的,但sub和div是最紧迫的,因为它们不可逆。
答案 0 :(得分:3)
您只需要覆盖__rsub__
,右侧减法:
class foo():
def __init__(self, value, otherstuff):
self.value = value
self.otherstuff = otherstuff
def __sub__(self, other):
return self.value - other
def __rsub__(self, other):
return other - self.value
输出:
print(b - a)
7
print(a - b)
-7
有类似的方法,例如__radd__
,__rmul__
用于其他操作。