我有一个向量类:
class Vector:
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)
这个很好用,比如我可以写:
a = Vector(1,2)
print(a + 1) # prints (2,3)
然而,如果操作顺序颠倒,那么它就会失败:
a = Vector(1,2)
print(1 + a) # raises TypeError: unsupported operand type(s)
# for +: 'int' and 'instance'
我理解这个错误:将一个int
对象添加到一个Vector
对象中是未定义的,因为我没有在int
类中定义它。有没有一种方法可以在不定义int
(或int
的父类)类中的情况下解决这个问题?