code: def _wrapture(orig):
      
  
  #    @functools.wraps(orig)
      def foo(*args):
          obj = args[0]
          obj.on_modify()
          return orig(*args)
      return foo
docs: Returns a new method that wraps orig (the original method) with
      something that first calls on_modify from the
      instance. _ListWrapper uses this to wrap all methods that modify
      the list.