import bisect class ListyBoom(list): def boom(*args, **kw): assert False append = insert = __setitem__ = __setslice__ = boom l = ListyBoom() try: l.insert(-1, 'data') assert False except AssertionError: pass # oops bisect.insort(l, 'data') assert l == ['data'] class DuckList(object): def __init__(self): self.bucket = [] def insert(self, index, item): self.bucket.insert(index, item) def __getitem__(self, index): return self.bucket[index] def __len__(self): return len(self.bucket) ok = DuckList() ok.insert(-1, 'data') assert ok.bucket == ['data'] bisect.insort(ok, 'insorted') assert ok.bucket == ['data', 'insorted']