docs: def get_attribute(self, attribute, value=None, features=False):
          """This returns a list of GFF objects (or GFF Features) with the given attribute and if supplied, those
          attributes with the specified value
  
          :param attribute: The 'info' field attribute we are querying
          :param value: Optional keyword, only return attributes equal to this value
          :param features: Optional keyword, return GFF Features instead of GFF Objects
          :return: A list of GFF objects (or GFF features if requested)
          """
          if attribute in self.filters:
              valid_gff_objects = self.fast_attributes[attribute] if not value else\
                  [i for i in self.fast_attributes[attribute] if i.attributes.get(attribute, False) == value]
              if features:
                  valid_ids = [gff_object.attributes.get(self.id_tag, None) for gff_object in valid_gff_objects]
                  return [self.feature_map[gff_id] for gff_id in valid_ids if gff_id]
              else:
                  return valid_gff_objects
          else:
              valid_gff_objects = [gff_object for gff_feature in self.feature_map.values()
                                for gff_object in gff_feature.features
                                if gff_object.attributes.get(attribute, False)]
              valid_gff_objects = valid_gff_objects if not value else [gff_object for gff_object in valid_gff_objects
                                                                       if gff_object.attributes[attribute] == value]
              if features:
                  valid_ids = [gff_object.attributes.get(self.id_tag, None) for gff_object in valid_gff_objects]
                  return [self.feature_map[gff_id] for gff_id in valid_ids if gff_id]
              else:
                  return valid_gff_objects