Well as code is executed in a linear way (downwards…), and self.something = ... calls __setattr__, it is called in the correct order (c, b, a), and the OrderedDict will keep the order by definition. Is that clearer?