Python:重载乘法

53 投票
2 回答
54746 浏览
提问于 2025-04-16 22:37

我有一个自定义的类,这个类里面有一个叫做 __mul__ 的函数,它是用来处理整数的。不过在我的程序中(在一些库里),它被反过来调用了,也就是说是 2 * x 这种形式,其中 x 是我的类的一个实例。请问有没有办法让它在这种情况下也能使用我的 __mul__ 函数呢?

2 个回答

37

也要实现 __rmul__ 这个方法。

class Foo(object):
    def __mul__(self, other):
        print '__mul__'
        return other
    def __rmul__(self, other):
        print '__rmul__'
        return other

x = Foo()
2 * x # __rmul__
x * 2 # __mul__
61

只需在类的定义中添加以下内容,你就可以开始使用了:

__rmul__ = __mul__

撰写回答