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
f._instance_setitem = types.MethodType(new_setitem, f, Foo)
f[0] = 0
Как динамически переопределить __setitem__? (без подкласса)