代码之家  ›  专栏  ›  技术社区  ›  Intrastellar Explorer

Python linter遍历strengum时看到字符串

  •  0
  • Intrastellar Explorer  · 技术社区  · 6 年前

    我已经实施了 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."""
    

    我有一个子类 强度 在这里我使用 for 循环遍历它。

    class TestStrEnum(StrEnum):
        """Test string enum."""
    
        A = "Apple"
        B = "Bananas"
    
    
    for enum_ in TestStrEnum:
        print(f"name = {enum_.name}, value = {enum_.value}.")
    

    这在运行时运行良好。但是,我的linter在引用 name 和 value 属性:

    Pycharm unresolved reference on enum

    我怎么才能不抱怨呢?

    问题似乎是在 StrEnum._member_map_ . 我认为解决方法可能是在 强度 ,但不确定使用哪一个。


    解决方案

    这是我通过使用 __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年5月提出。由于这个问题目前只有6票(截至2020年4月11日),我不确定它是否会很快得到解决。

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

    0 回复  |  直到 6 年前
        1
  •  2
  •   user2235698    6 年前

    这是一个众所周知的问题,请投赞成票 https://youtrack.jetbrains.com/issue/PY-36205 (在问题标题附近竖起大拇指)

    推荐文章