Python能否实现运算符双向重载?使操作数顺序不影响运算
Python中让运算符重载支持左右操作数顺序无关的方法
当你写A(1) + 4时,Python会调用A类的__add__方法,所以能正常运行;但反过来4 + A(1)时,Python会先尝试调用int类的__add__方法,而int类型根本不知道怎么处理A的实例,所以会抛出TypeError。
要解决这个问题,你需要给A类实现反向运算符重载方法——__radd__,它会在左操作数不支持与当前类实例的运算时被调用。
修改后的代码如下:
class A: def __init__(self, x: int): self.x = x def __add__(self, other: int): return self.x + other # 实现反向加法方法 def __radd__(self, other: int): # 因为加法满足交换律,直接复用__add__的逻辑就行 return self.__add__(other) a = A(1) + 4 # 结果为5 a = 4 + A(1) # 现在正常运行,结果也是5
额外说明:
- 对于其他二元运算符,都有对应的反向方法:比如减法对应
__rsub__、乘法对应__rmul__、除法对应__rtruediv__等。 - 需要注意的是,像减法、除法这种本身不满足交换律的运算,不能直接复用正向方法的逻辑,得根据实际需求重新实现反向方法的内容。
内容的提问来源于stack exchange,提问作者Blackgaurd
相关产品推荐
相关产品推荐

