Search code examples
pythonenumstyping

python type annotations for abstract Enum value


I have an enum

from enum import Enum

class StrangeEventTypeVariants(Enum):
    crew_training = "Crew training"
    crew_travel = "Crew travel"
    flight = "Flight"
    maintenance = "Maintenance"
    parking = "Parking"

and function that of class that process abstract enum

class EnumSuggest:
    def __init__(self, enum: Enum):
        self.variants = [{"id": member.name, "name": member.value} for member in enum]

    def get_suggest(self, _):
        return self.variants

but annotation above is incorrect, for

suggest = EnumSuggest(StrangeEventTypeVariants)

I got next linter warning

Expected type Enum, got Type[StrangeEventTypeVariants]

How to fix it ?


Solution

  • You aren't passing an instance of Enum to EnumSuggest.__init__; you are passing a subclass of Enum. The type hint should reflect that.

    class EnumSuggest:
        def __init__(self, enum: Type[Enum]):
            self.variants = [{"id": member.name, "name": member.value} for member in enum]
    
        def get_suggest(self, _):
            return self.variants