To define a class behaviour in the following statement:
my_object[item] = ...
I know I need to define the __setitem__ method.
What method do I need to define for the following statement:
my_object[item] += ...
To define a class behaviour in the following statement:
my_object[item] = ...
I know I need to define the __setitem__ method.
What method do I need to define for the following statement:
my_object[item] += ...
my_object needs __getitem__ to retrieve the initial value of my_object[item] and __setitem__ to set the new value.
Additionally, Python needs a way to perform the addition. Either my_object[item] needs to implement the addition with __add__ or __iadd__, or the object on the right side of the += needs to implement __radd__.
__setitem__ will cover you with regard to your container class; it's called when you do any augmented assignment just as with regular assignment. As far as your class can tell, there's no difference between x[i] += 1 and x[i] = x[i] + 1.
If you need to treat += differently from = or from -=, that's handled by the special methods of the item's class.