这听起来有点愚蠢,但我不是在谈论1 + 2 = 2 + 1
。我在谈论将具有__add__
方法的对象添加到数字的位置。一个例子是:
>>> class num:
... def __add__(self,x):
... return 1+x
...
>>> n = num()
>>> 1+n
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: unsupported operand type(s) for +: 'int' and 'instance'
>>> n+1
2
>>>
我不明白为什么第一个返回错误而第二个像普通
一样答案 0 :(得分:8)
不假设添加是可交换的 - 例如,[1] + [2] != [2] + [1]
- 因此,当您的对象位于+
的右侧时,您需要实现一个单独的方法。左不知道如何处理它。
def __radd__(self, other):
# Called for other + self when other can't handle it or self's
# type subclasses other's type.
所有其他二元操作都存在类似的方法,所有操作都是通过在同一位置粘贴r
来命名的。
答案 1 :(得分:4)
是的,订单很重要。
在第一种情况下,调用__add__
的{{1}}方法(当然不知道如何向自身添加非数字类的实例);在第二种情况下,调用int
的{{1}}方法。
如果__add__
方法失败,那么Python可以检查user2357112指出的替代方案。