code: def get_args(self, func):
          
          def reverse(iterable):
              if iterable:
                  iterable = list(iterable)
                  while len(iterable):
                      yield iterable.pop()
  
          args, varargs, varkw, defaults = inspect.getargspec(func)
          result = {}
          for default in reverse(defaults):
              result[args.pop()] = default
  
          for arg in reverse(args):
              if arg == 'self':
                  continue
              result[arg] = None
  
          return result
docs: Get the arguments of a method and return it as a dictionary with the
          supplied defaults, method arguments with no default are assigned None