When adding an integer value to a float value, I realized that __add__ method is working fine if called on float, such as this:
__add__
>>> n =
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.
a + b
a.__add__(b)
b.__radd__(a)
a.__add__
NotImplemented
b
a