docs: def get_shreds(self, feature_extractors, sheet_name):
          """Detects shreds in the current sheet and constructs Shred instances.
  
          Caches the results for further invocations.
  
          Args:
              feature_extractors: iterable of AbstractShredFeature instances to
                  use for shreds feature assignment.
              sheet_name: string, included in shred attributes.
  
          Returns:
              list of Shred instances.
          """
          if self._shreds is None:
              shreds = []
              _, contours, _ = cv2.findContours(self._foreground_mask,
                                             cv2.RETR_EXTERNAL,
                                             cv2.CHAIN_APPROX_SIMPLE)
              for i, contour in enumerate(contours):
                  shred = self._make_shred(contour, i, feature_extractors,
                                           sheet_name)
                  if shred is not None:
                      shreds.append(shred)
              self._shreds = shreds
          return self._shreds