Python:__ add__和+,浮点数和整数的不同行为

Gia*_*ani 5 python floating-point integer add

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

>>> n = 2.0
>>> m = 1
>>> n.__add__(m)
3.0
Run Code Online (Sandbox Code Playgroud)

但如果调用整数则不会:

>>> m.__add__(n)
NotImplemented
Run Code Online (Sandbox Code Playgroud)

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

>>> n + m
3.0
>>> m + n
3.0
Run Code Online (Sandbox Code Playgroud)

有人知道为什么会这样吗?是__add__+彼此没有很深的关系?

use*_*ica 6

a + b没有直接翻译成a.__add__(b).b.__radd__(a)如果a.__add__不存在或返回它NotImplemented,或者如果ba's类型的子类型的实例,它也会尝试.