I can write a member F.__iadd__ (self, *args) and then call it with 2 args: f = F() f.__iadd__ (a, b) And then args is: (a, b) But it seems impossible to spell this as f += a, b That, instead, results in args = ((a, b),) So should I just abandon the idea that += could be used this way? -- Those who fail to understand recursion are doomed to repeat it