' b'当a-b覆盖__sub__是我的班级

时间:2015-02-03 00:36:32

标签: python

我有一个类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是最紧迫的,因为它们不可逆。

1 个答案:

答案 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__用于其他操作。