Skip to content

features

ensembl.io.genomio.gff3.features

GFF3 features.

GFFSeqFeature

Bases: SeqFeature

Extends Bio.SeqFeature.SeqFeature with sub_features, to be used for typing.

Source code in src/python/ensembl/io/genomio/gff3/features.py
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
class GFFSeqFeature(SeqFeature):
    """Extends `Bio.SeqFeature.SeqFeature` with sub_features, to be used for typing."""

    def __init__(
        self,
        location: Location | None = None,
        *,
        type: str = "",  # pylint: disable=W0622
        id: str = "<unknown id>",  # pylint: disable=W0622
        qualifiers: dict | None = None,
        sub_features: list[GFFSeqFeature] | None = None,
    ):
        super().__init__(location, type=type, id=id, qualifiers=qualifiers)
        if sub_features is None:
            sub_features = []
        self.sub_features = sub_features

    @classmethod
    def cast(cls, feat: SeqFeature) -> GFFSeqFeature:
        """Cast a SeqFeature to a GFFSeqFeature."""
        feat.__class__ = cls
        if not hasattr(feat, "sub_features"):
            feat.sub_features = []  # type: ignore[attr-defined]
        return feat  # type: ignore[return-value]

sub_features = sub_features instance-attribute

cast(feat) classmethod

Cast a SeqFeature to a GFFSeqFeature.

Source code in src/python/ensembl/io/genomio/gff3/features.py
43
44
45
46
47
48
49
@classmethod
def cast(cls, feat: SeqFeature) -> GFFSeqFeature:
    """Cast a SeqFeature to a GFFSeqFeature."""
    feat.__class__ = cls
    if not hasattr(feat, "sub_features"):
        feat.sub_features = []  # type: ignore[attr-defined]
    return feat  # type: ignore[return-value]