Mypy не может определить перечисления, создаваемые из переменной списка - PullRequest
2 голосов
/ 12 марта 2020

Перечисления можно создать, взяв список возможных членов, что я делаю так:

# example_issue.py
import enum

yummy_foods = ["ham", "cheese"]
foods = enum.Enum("Foods", yummy_foods)
cheese = foods.cheese

Это выглядит нормально и работает нормально, но mypy возвращает

example_issue.py:4: error: Enum() expects a string, tuple, list or dict literal as the second argument
example_issue.py:5: error: "Type[foods]" has no attribute "cheese"
Found 2 errors in 1 file (checked 1 source file)

Что здесь делает mypy и почему не следует, что foods может принимать любое значение в yummy_foods?

1 Ответ

1 голос
/ 12 марта 2020

Использование переменной yummy_foods слишком динамично c для проверки типа mypy stati c, см. эту проблему GitHub .

Если вы измените свой код для генерации Enum as:

foods = enum.Enum("Foods", ["ham", "cheese"])

mypy сможет выяснить, какие атрибуты существуют в перечислении.

...