+ 2
Argument passing to __add__ magic method
Hello dear coders, Could you please advice how the value of a is passed to the â+â operator (actually __add__ method) in the following code: class malicious(int): def __init__(self, value): pass def __add__(self, x): res = self // x return res a = malicious(5) print(3+a) #Output: 8 I know that the add method of the class isnât working here as I stated 3+a not a+3, but it is unclear how the value of the a is seen and passed by to the usual + operator.
2 Answers
+ 3
malicious is a subclass of int, so the instance "a" still represents a number.
When you use the operation 3+a then first python is checking if addition is defined for the left operand (3) as this is just a normal number, the default addition is used.
You would get a different result if you calculate a+3 because malicious class has overwritten this operator.
Additionally if the __add__ magic method is not defined for the object on the left side of the + sign, then Python still checks if you have __radd__ (right addition) defined for the object on the right side. If this doesn't work either, you get an error.
0
Tibor Santa, thanks a lot, it is very comperehensive answer!
Could you please explain how the 5 is passed to the __add__ method of int class?
I even didnât stated that self.value = value, but it is directly passed to the function.
This part is the last dark point for me.