Python:__add__ 和 +, float 和整数的不同行为

标签 python floating-point integer add

当将整数值添加到浮点值时,我意识到如果在浮点上调用 __add__ 方法工作正常,例如:

>>> n = 2.0
>>> m = 1
>>> n.__add__(m)
3.0

但如果对整数调用则不是:

>>> m.__add__(n)
NotImplemented

起初我以为 __add__ 只是针对 intfloat 类型(比如接受添加到 int 的 float 类型)以不同的方式实现类型,但不是相反)。然后我注意到如果我改用 + 运算符一切正常:

>>> n + m
3.0
>>> m + n
3.0

有人知道为什么会这样吗? __add__+ 之间的关系不是很深吗?

最佳答案

a + b 不会直接转换为 a.__add__(b)。它还会尝试 b.__radd__(a) 如果 a.__add__ 不存在或返回 NotImplemented,或者如果 ba 类型的子类型的实例。

关于Python:__add__ 和 +, float 和整数的不同行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38624450/

相关文章:

python - python 中奇怪的 "too many indices for array"错误

python - Flink Slots/Parallelism 与最大 CPU 能力

python - 在 Scikit 学习支持向量回归中查找混合次数多项式

c - double 的 Pow 实现

C 文字和溢出

javascript - javascript中的浮点值提取

c++ - 减法时整数溢出的种类

python - 计算字典键中值重复的次数

java - 为什么在预热阶段浮点运算要快得多?

c++ - 使用 SEH 时如何解释 GetExceptionCode 结果?