def METHOD_NAME(self, *args, **kwargs):
    if func.__name__ != '__init__':
        raise TypeError('this decorator should only be used on __init__ method')
    all_pars = inspect.signature(func).parameters
    tmp = {k: v.default for k, v in all_pars.items() if k not in taboo}
    tmp_list = [k for k in all_pars.keys() if k not in taboo]
    # set args by aligning tmp_list with arg values
    for k, v in zip(tmp_list, args):
        tmp[k] = v
    # set kwargs
    for k, v in kwargs.items():
        if k in tmp:
            tmp[k] = v
    if hasattr(self, '_init_kwargs_dict'):
        self._init_kwargs_dict.update(tmp)
    else:
        self._init_kwargs_dict = tmp
    convert_tuple_to_list(self._init_kwargs_dict)
    f = func(self, *args, **kwargs)
    return f