class FlushRegion: def __init__(self, *entries, left_write = None, right_write = None): for left, right in zip(entries[:-1], entries[1:]): assert left.end <= right.start if left_write is not None and len(entries): assert left_write.end <= entries[0].start if right_write is not None: assert left_write.end <= right_write.start if right_write is not None and len(entries): assert right_write.start >= entries[-1].end self.entries = entries self.left_write = left_write self.right_write = right_write # i'm thinking of also renaming Flush.Entry to ChunkRegion to help improve habits around generalisation i think it makes sense for me to go back to thinking_of_2, and change the implementation a little to use the above classes. this helps me build ease around integrating the disparate work.