'Evaluates all attributes and sets them to the evaluated version,
so that all future accesses of attributes do not need to evaluate
parent attributes.'

def squash(self):

    if (not self._squashed):
        for name in self._valid_attrs.keys():
            self._attributes[name] = getattr(self, name)
        self._squashed = True
