一个Python类能否进行双向重载?

4

我不确定该如何称呼这个问题,请耐心听我解释。

现在我有一个类/对象,我重载了乘法运算符def __mul__(self, secondthing):,所以如果我执行myObject * 4,它知道该怎么做。

但是如果我执行4 * myObject,即反过来的情况,它就不知道该怎么做。


3
请参考 https://docs.python.org/zh-cn/2/reference/datamodel.html#object.__rmul__ - “只有在左操作数不支持相应的操作且操作数具有不同类型时,才会调用这些函数。” - jonrsharpe
https://dev59.com/omw15IYBdhLWcg3wA24A - NKamrath
1个回答

2
你可以实现 __rmul__

这些方法被调用来实现二进制算术运算(+,-,*,/,%,divmod(),pow(),**,<<,>>,&,^,|)与反射(交换)操作数。只有在左操作数不支持相应的操作并且操作数具有不同类型时才会调用这些函数。


这篇相关帖子建议,只要实现本来就是一样的话,你可以简单地做__rmul__ = __mul__ - Kevin
始终尝试做到DRY。创建另一个函数并在两个函数中调用它,或者可能直接调用另一个重载函数。 - Paul Rooney

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接