Python幂运算对应特殊方法是什么?反向幂运算报错如何处理?
Python幂运算特殊方法相关问题解答
幂运算对应的特殊方法
Python 中自定义类实现正向幂运算(即类实例位于**运算符左侧)对应的特殊方法是__pow__(),也就是你现有代码中已经实现的方法。
报错原因
执行3**f时报错的原因如下:
- 当运算符左侧为Python内置类型(此处为int)、右侧为自定义类实例时,Python会优先调用左侧内置类型的运算方法,int原生的幂运算逻辑不支持和你自定义的Foo类实例运算,会触发 fallback 逻辑。
- fallback 逻辑会尝试调用右侧实例的反向幂运算特殊方法
__rpow__(),你没有在Foo类中实现该方法,因此最终抛出TypeError。
反向幂运算实现方案
你只需要在Foo类中新增__rpow__()方法即可实现反向幂运算的支持,该方法的入参为运算符左侧的数值,你可以在方法内自定义运算逻辑。
完整实现代码:
class Foo: def __init__(self, data): self.data = data def __pow__(self, power): # 处理 self ** power 的逻辑 return self.data ** power def __rpow__(self, base): # 处理 base ** self 的逻辑 return base ** self.data if __name__ == '__main__': f = Foo(2) print(f ** 3) # 输出 8,调用 __pow__ print(3 ** f) # 输出 9,调用 __rpow__
额外说明
如果需要同时支持pow()内置函数的三参数取模形式pow(base, exp, mod),可以给__pow__和__rpow__增加第三个参数mod,对应实现取模逻辑即可。
内容的提问来源于stack exchange,提问作者Sam-gege
相关产品推荐
相关产品推荐

