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