from collections import OrderedDict class ModelCache(OrderedDict): def __init__(self, max_size=2): super().__init__() self.max_size = max_size def __getitem__(self, key): value = super().__getitem__(key) self.move_to_end(key) return value def __setitem__(self, key, value): if key in self: self.move_to_end(key) super().__setitem__(key, value) if len(self) > self.max_size: oldest = next(iter(self)) del self[oldest]