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()

def start(
            self, target=None, args=None, kwargs=None, advices=None,
            exec_ctx=None, ctx=None
    ):
        """ 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()
        """

        # 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