<SYSTEM_TASK:>
Solve the following problem using Python, implementing the functions described below, one line at a time
<END_TASK>
<USER_TASK:>
Description:
 def get_resource_solvers(self, resource):
 """Returns the resource solvers that can solve the given resource. Arguments --------- resource : dataql.resources.Resource An instance of a subclass of ``Resource`` for which we want to get the solver classes that can solve it. Returns ------- list The list of resource solvers instances that can solve the given resource. Raises ------ dataql.solvers.exceptions.SolverNotFound When no solver is able to solve the given resource. Example ------- [<AttributeSolver>] [<ListSolver>] Traceback (most recent call last):
 """


        solvers_classes = [s for s in self.resource_solver_classes if s.can_solve(resource)]

        if solvers_classes:
            solvers = []

            for solver_class in solvers_classes:

                # Put the solver instance in the cache if not cached yet.
                if solver_class not in self._resource_solvers_cache:
                    self._resource_solvers_cache[solver_class] = solver_class(self)

                solvers.append(self._resource_solvers_cache[solver_class])

            return solvers

        raise SolverNotFound(self, resource)