问题
When adding an integer value to a float value, I realized that __add__ method is working fine if called on float, such as this:
>>> n = 2.0
>>> m = 1
>>> n.__add__(m)
3.0
but not if called on an integer:
>>> m.__add__(n)
NotImplemented
At first I thought that __add__ was just being implemented differently for int and float types (like float types accepting to be added to int types, but not the opposite). Then I noticed that everything works fine if I use the + operator instead:
>>> n + m
3.0
>>> m + n
3.0
Does anybody know why this is happening? Are __add__ and + not deeply related to each other?
回答1:
a + b does not directly translate to a.__add__(b). It also tries b.__radd__(a) if a.__add__ doesn't exist or returns NotImplemented, or if b is an instance of a subtype of a's type.
来源:https://stackoverflow.com/questions/38624450/python-add-and-different-behavior-with-float-and-integer