class Scope(object, DictMixin): def __init__(self, parent): self.parent = parent self.__symbols = {} def __getitem__(self, key): try: return self.__symbols[key] except KeyError: return self.parent[key] def __setitem__(self, key, item): self.__symbols[key] = item def keys(self): keys = self.__symbols.keys() for key in self.parent.keys(): if key not in keys: keys.append(key) return keys