Python运算符重载:只能交换还是正确?

时间:2014-10-06 18:02:45

标签: python numpy

如何解析运算符重载? 我有一个类对象o,并希望使用重载的-1 * o运算符执行__mul__。 当左操作数是-1时,是否会正确解析?乘法应该是可交换的(矩阵和交叉乘积除外)......?

2 个答案:

答案 0 :(得分:5)

那是__rmul__的用途。在您的场景中,Python调用int.__mul__(-1, o)int不知道如何执行此操作,因此此调用返回NotImplemented。因此,Python调用type(o).__rmul__(o, -1)为您的班级提供处理它的机会。

答案 1 :(得分:-1)

无论是否过载,都始终以相同的方式解析运算符。由于unary - has higher precedence than *-1 * o将始终被解析为(-1) * o