Я ввел StrEnum
(иначе Enum
члены должны быть str
) в соответствии с инструкциями в Python 3.6 enum
документах, раздел 8.13.13.4 Others
.
from enum import Enum
class StrEnum(str, Enum):
"""Enum where members are strings."""
У меня есть подкласс StrEnum
, где я использую for
l oop для его итерации.
class TestStrEnum(StrEnum):
"""Test string enum."""
A = "Apple"
B = "Bananas"
for enum_ in TestStrEnum:
print(f"name = {enum_.name}, value = {enum_.value}.")
Это прекрасно работает во время выполнения. Однако мой линтер жалуется на неразрешенную ссылку при обращении к атрибутам name
и value
:
![Pycharm unresolved reference on enum](https://i.stack.imgur.com/7gOWU.png)
Как получить мой линтер, чтобы не жаловаться?
Кажется, проблема в том, что линтер не проверяется должным образом в StrEnum._member_map_
. Я думаю, что решение может заключаться в том, чтобы переопределить метод dunder в StrEnum
, но я не уверен, какой из них использовать.
Обходное решение
Вот Обходной путь, который я нашел, используя атрибут __members__
для явного доступа к членам.
for enum_member_name, enum_member in TestStrEnum.__members__.items():
print(f"name = {enum_member.name}, value = {enum_member.value}.")
Мой линтер - это проверки кода PyCharm 2019.2.6 CE
.
** РЕДАКТИРОВАТЬ **
В ответе @ user2235698 кажется, что это известная проблема с PyCharm: PY-36205 , поднятая в мае 2019 года. только в настоящее время имеет 6 голосов (по состоянию на 11 апреля 2020 года), я не уверен, что это будет исправлено в ближайшее время.
Если у кого-то есть хорошее решение, которое можно использовать, пока проблема не будет решена, я все еще интересно.