你还需要定义__radd__
有些操作不一定像这样评估b == b a,这就是Python定义add和radd方法的原因.
更好地解释自己:它支持“int”没有定义类Vector实例作为操作的一部分的事实.因此,向量1与1向量不同.
当Python试图查看1 .__ add__方法可以做什么时,会引发异常. Python继续寻找Vector .__ radd__操作来尝试完成它.
在OP的情况下,评估是正确的,并且__radd__ = __add__就足够了
class Vector(object):
def __init__(self, x, y):
self.x, self.y = x, y
def __str__(self):
return '(%s,%s)' % (self.x, self.y)
def __add__(self, n):
if isinstance(n, (int, long, float)):
return Vector(self.x+n, self.y+n)
elif isinstance(n, Vector):
return Vector(self.x+n.x, self.y+n.y)
__radd__ = __add__
a = Vector(1, 2)
print(1 + a)
哪个输出:
(2,3)
这同样适用于所有类似数字的操作.