docs: def get_resource(self, service_name, resource_name, base_class=None):
          """
          Returns a ``Resource`` **class** for a given service.
  
          :param service_name: A string that specifies the name of the desired
              service. Ex. ``sqs``, ``sns``, ``dynamodb``, etc.
          :type service_name: string
  
          :param resource_name: A string that specifies the name of the desired
              class. Ex. ``Queue``, ``Notification``, ``Table``, etc.
          :type resource_name: string
  
          :param base_class: (Optional) The base class of the object. Prevents
              "magically" loading the wrong class (one with a different base).
          :type base_class: class
  
          :rtype: <kotocore.resources.Resource subclass>
          """
          try:
              return self.cache.get_resource(
                  service_name,
                  resource_name,
                  base_class=base_class
              )
          except NotCached:
              pass
  
          # We didn't find it. Construct it.
          new_class = self.resource_factory.construct_for(
              service_name,
              resource_name,
              base_class=base_class
          )
          self.cache.set_resource(service_name, resource_name, new_class)
          return new_class