Het*_*oni 9 python enums type-hinting pycharm
Python的枚举类支持迭代,但PyCharm很难搞清楚这一点.
from enum import Enum
class Color(Enum):
RED = 0
BLUE = 1
for color in Color:
# Warning: Expected 'collections.Iterable', got 'Type[Color]' instead
print(color)
Run Code Online (Sandbox Code Playgroud)
虽然这种方法EnumMeta.__iter__存在,但PyCharm很难解决这个问题.
我不介意手动添加类型提示来解决问题,我只是不确定什么和在哪里.
也许这不是最干净的解决方案,但以下对我有用:
from enum import Enum
import typing
class Color(Enum):
RED = 0
BLUE = 1
Color = Color # type: typing.Union[typing.Type[Color], typing.Iterable]
Run Code Online (Sandbox Code Playgroud)
PyCharm支持使用PEP 484中定义的格式进行类型提示(对于低于 3.5 的 Python 版本以注释的形式,对于 3.5 及更高版本以注释的形式)。
这里重要的注意事项是,在低于 3.5 的 Python 版本上,typing应以某种方式保护导入模块(PyCharm 会识别此导入有效,即使没有typing在站点包中安装模块,但是在代码运行时ImportError发生)。