Python中缺少幂运算魔术方法

时间:2019-04-12 03:13:32

标签: python python-3.x

我正在自定义类中定义一堆数字魔术方法,并且发现了我无法解释的与pow() /求幂有关的差距。

当您的自定义类是第一个/最左边的操作数时,会调用

__pow__(self, other, modulo=None)

当您的自定义类是第二个操作数时,会调用

__rpow__(self, other, modulo=None)

我找到了一个都不叫的情况,但我不明白。这是一个示例案例,它仅返回被调用方法的名称:

class Power:
    def __pow__(self, other, modulo=None):
        return '__pow__'
    def __rpow__(self, other, modulo=None):
        return '__rpow__'

>>> x = Power()
>>> pow(x, 5)
'__pow__'
>>> pow(5, x)
'__rpow__'

到目前为止,看起来不错。但是,看看使用可选的modulo参数时会发生什么:

>>> pow(x, x, 5)
'__pow__'
>>> pow(5, x, 5)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: unsupported operand type(s) for pow(): 'int', 'Power', 'int'

tl; dr似乎在使用modulo参数时未调用__rpow__。有什么作用?

0 个答案:

没有答案