code: def start(
              self, target=None, args=None, kwargs=None, advices=None,
              exec_ctx=None, ctx=None
      ):
          
  
          # init target and _interception if not None as set_target method do
          if target is not None:
              self.set_target(target=target, ctx=ctx)
  
          # init args if not None
          if args is not None:
              self.args = args
  
          # init kwargs if not None
          if kwargs is not None:
              self.kwargs = kwargs
  
          # get advices to process
          if advices is None:
              if self._advices is not None:
                  advices = self._advices
              else:
                  advices = self.get_advices(self._interception)
  
          # initialize self._advices_iterator
          self._advices_iterator = iter(advices)
  
          # initialize execution context
          self.exec_ctx = self._exec_ctx.copy()
  
          if exec_ctx is not None:
              self.exec_ctx.update(exec_ctx)
  
          result = self.proceed()
  
          return result
docs: Start to proceed this Joinpoint in initializing target, its
          arguments and advices. Call self.proceed at the end.
  
          :param callable target: new target to use in proceeding. self.target by
              default.
          :param tuple args: new target args to use in proceeding. self.args by
              default.
          :param dict kwargs: new target kwargs to use in proceeding. self.kwargs
              by default.
          :param list advices: advices to use in proceeding. self advices by
              default.
          :param dict exec_ctx: execution context.
          :param target_ctx: target ctx to use in proceeding.
          :return: self.proceed()