<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_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