def get_attribute(self, attribute, value=None, features=False):
if attribute in self.filters:<EOL><INDENT>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]<EOL>if features:<EOL><INDENT>valid_ids = [gff_object.attributes.get(self.id_tag, None) for gff_object in valid_gff_objects]<EOL>return [self.feature_map[gff_id] for gff_id in valid_ids if gff_id]<EOL><DEDENT>else:<EOL><INDENT>return valid_gff_objects<EOL><DEDENT><DEDENT>else:<EOL><INDENT>valid_gff_objects = [gff_object for gff_feature in self.feature_map.values()<EOL>for gff_object in gff_feature.features<EOL>if gff_object.attributes.get(attribute, False)]<EOL>valid_gff_objects = valid_gff_objects if not value else [gff_object for gff_object in valid_gff_objects<EOL>if gff_object.attributes[attribute] == value]<EOL>if features:<EOL><INDENT>valid_ids = [gff_object.attributes.get(self.id_tag, None) for gff_object in valid_gff_objects]<EOL>return [self.feature_map[gff_id] for gff_id in valid_ids if gff_id]<EOL><DEDENT>else:<EOL><INDENT>return valid_gff_objects<EOL><DEDENT><DEDENT>
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)