class List(list):
def __init__(self, offset, *args):
super().__init__(*args)
self.offset = offset
def offset(method):
def wrapped(self, index, *args):
index -= self.offset
return method(self, index, *args)
return wrapped
@offset
def __setitem__(self, key, value):
super().__setitem__(key, value)
@offset
def __getitem__(self, item):
return super().__getitem__(item)
a = List(42, 'abcdef')