gpt4 book ai didi

python 运算符重载 __radd__ 和 __add__

转载 作者:行者123 更新时间:2023-12-05 08:54:06 24 4
gpt4 key购买 nike

我目前正在学习 python 运算符重载(准确地说是 __radd____add__),我有以下代码

class Commuter1:
def __init__(self, val):
self.val = val
def __add__(self, other):
print('add', self.val, other)
return self.val + other


def __radd__(self, other):
print('radd', self.val, other)
return other + self.val


x = Commuter1(88)
y = Commuter1(99)

print(x + y)

结果如下

enter image description here

当单独使用时,我理解 __radd____add__ 是如何工作的。但是对于 x + y 行,我不确定为什么会同时调用 __radd____add__ 方法。

最佳答案

首先,Python 查看xy 的类型来决定是调用x.__add__ 还是y.__radd__ 。由于它们都是同一类型 Commuter1,因此它首先尝试 x.__add__


然后,在您的 __add__ 方法中,您执行以下操作:

return self.val + other

因此,Python 查看 self.valother 的类型来决定是调用 self.val.__add__ 还是 其他.__radd__。由于它们是不相关的类型 intCommuter1,它首先尝试 int.__add__

但是 int.__add__ 为它不知道的类型返回 NotImplemented,因此 Python 回退到调用 other.__radd__


在你的 __radd__ 方法中,你这样做:

return other + self.val

因此,Python 查看otherself.val 的类型来决定是调用other.__add__ 还是self .val.__radd__。因为它们都是相同类型的 int,所以它首先尝试 __add__


当然 int.__add__ 对另一个 int 有效,因此它返回 __radd__ 内部 + 的值,你返回,它返回 __add__ 里面的 + 的值,你返回,它返回顶层 + 的值,你打印的。

关于python 运算符重载 __radd__ 和 __add__,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51298551/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com