我正在自定义类中定义一堆数字魔术方法,并且发现了我无法解释的与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__
。有什么作用?