Question: I always though that using the "+" operator in Python (3.5) calls the \_\_add\_\_ method under the hood and return the sum. However, I noticed some quirky behavior when negative numbers are involved. 
Naturally,

```
>>>-3 + 7

```

returns 4 

But(!) 

```
>>>-3 .__add__(7)

```

returns -10 and

```
>>>-3 .__add__(-7)
4
>>>3 .__add__(7)
10

```

Is there a reason why \_\_add\_\_ signs the arguments if the object is signed. Also, what changes in the method so that when I use "+", the "correct" value comes out?

Answer: 
`-` is an operator too, an unary one. You called `__add__` on `3`, not on the result of `-` applied to `3`, because [attribute access binds more tightly than the `-` operator](https://docs.python.org/2/reference/expressions.html#operator-precedence). 

Use parentheses:

```
>>> (-3).__add__(7)
4

```

Your code applies the `-` unary operator to the result of `3 + 7` instead.
`.__add__` is an operation between two objects so 3.**add**(7) = 10;
-3.add(7) is like calling add for 3 and 7 and then applying (-) as an operator 
So -(10) as a result 
You need to use parentheses to get the proper operation