code: def recreate(cls, *args, **kwargs):
          
          cls.check_arguments(kwargs)
          first_is_callable = True if any(args) and callable(args[0]) else False
          signature = cls.default_arguments()
          allowed_arguments = {k: v for k, v in kwargs.items() if k in signature}
          if (any(allowed_arguments) or any(args)) and not first_is_callable:
              if any(args) and not first_is_callable:
                  return cls(args[0], **allowed_arguments)
              elif any(allowed_arguments):
                  return cls(**allowed_arguments)
  
          return cls.instances[-1] if any(cls.instances) else cls()
docs: Recreate the class based in your args, multiple uses