Python如何在没有linter(PyCharm)未解析引用的情况下迭代Strengum

2024-10-08 21:24:56 发布

您现在位置:Python中文网/ 问答频道 /正文

我已经按照Python3.6enum文档第^{}节中的说明实现了一个StrEnum(即强制Enum成员成为str

from enum import Enum


class StrEnum(str, Enum):
    """Enum where members are strings."""

我有一个子类StrEnum,其中我使用for循环对其进行迭代

class TestStrEnum(StrEnum):
    """Test string enum."""

    A = "Apple"
    B = "Bananas"


for enum_ in TestStrEnum:
    print(f"name = {enum_.name}, value = {enum_.value}.")

这在运行时运行良好。但是,我的linter抱怨在引用namevalue属性时存在未解析的引用:

Pycharm unresolved reference on enum

我怎样才能让我的皮棉不抱怨?

问题似乎是在StrEnum._member_map_内没有正确检查过梁。我认为解决方案可能是重写StrEnum中的dunder方法,但不确定使用哪个方法


变通解决方案

这里是我通过使用__members__属性以显式方式访问成员而找到的一个解决方法

for enum_member_name, enum_member in TestStrEnum.__members__.items():
    print(f"name = {enum_member.name}, value = {enum_member.value}.")

我的linter是PyCharm 2019.2.6 CE的代码检查

**编辑**

根据@user2235698的回答,这似乎是PyCharm的一个已知问题:PY-36205,于2019年5月提出。由于这个问题目前只有6票(截至2020年4月11日),我不确定它是否会很快得到解决

如果有人有一个好的解决方案,可以使用,直到问题得到解决,我仍然感兴趣


Tags: 方法nameinforvalue成员enum解决方案

热门问题