class Foo(object):

    def __setitem__(self, k, v):
        return self._instance_setitem(k, v)

def _instance_setitem(self, k, v):
    print('old setitem')

def new_setitem(self, k, v):
    print('new setitem')
f[0] = 0
How to dynamically override __setitem__? (no subclass)