Python:__add__ 和 +,浮点数和整数的不同行为
Python: __add__ and +, different behavior with float and integer
将整数值添加到浮点值时,我意识到如果在浮点数上调用 __add__
方法工作正常,例如:
>>> n = 2.0
>>> m = 1
>>> n.__add__(m)
3.0
但如果调用整数则不会:
>>> m.__add__(n)
NotImplemented
起初我以为 __add__
只是针对 int
和 float
类型以不同的方式实现(比如 float 类型接受添加到 int 类型,而不是相反) .然后我注意到如果我改用 + 运算符,一切正常:
>>> n + m
3.0
>>> m + n
3.0
有人知道为什么会这样吗? __add__
和 +
之间的关系不是很深吗?
a + b
不会直接转换为 a.__add__(b)
。它还会尝试 b.__radd__(a)
如果 a.__add__
不存在或 returns NotImplemented
,或者如果 b
是 a
的子类型的实例s型。
将整数值添加到浮点值时,我意识到如果在浮点数上调用 __add__
方法工作正常,例如:
>>> n = 2.0
>>> m = 1
>>> n.__add__(m)
3.0
但如果调用整数则不会:
>>> m.__add__(n)
NotImplemented
起初我以为 __add__
只是针对 int
和 float
类型以不同的方式实现(比如 float 类型接受添加到 int 类型,而不是相反) .然后我注意到如果我改用 + 运算符,一切正常:
>>> n + m
3.0
>>> m + n
3.0
有人知道为什么会这样吗? __add__
和 +
之间的关系不是很深吗?
a + b
不会直接转换为 a.__add__(b)
。它还会尝试 b.__radd__(a)
如果 a.__add__
不存在或 returns NotImplemented
,或者如果 b
是 a
的子类型的实例s型。