对于代码文档工具,我想分析Python Enum类并打印其详细信息。还应打印各个枚举值的文档字符串。
但是,由于 Enum 值显示为其 Enum 类,即
type(Colors.RED)
-> <enum 'Colors'>
,它们呈现 Enum 类“我们知道的颜色...”的 __doc__
字符串,而不是值的预期文档字符串:“红色”。
这是一个最小的例子:
from enum import Enum
class Colors(Enum):
"""Colors we know..."""
RED = 1
"""The red color"""
GREEN = 2
"""The green color"""
BLUE = 3
"""The blue color"""
for color in Colors:
print(color.name, "->", color.__doc__)
这导致
RED -> Colors we know...
GREEN -> Colors we know...
BLUE -> Colors we know...
不过我想看看
RED -> The red color
GREEN -> The gree color
BLUE -> The blue color
我发现一些解释暗示这根本不可能,例如,https://peps.python.org/pep-0258/#attribute-docstrings。
但是,有一些文档告诉我可以选择将文档字符串添加到枚举值,例如,如何将文档字符串添加到枚举上?,并且 - 显然 - IDE 能够处理它们。
那些智能感知工具真的会自己解析代码来实现这一目的吗?
我该怎么做?
在不依赖静态代码分析工具的情况下实现您想要的效果的一种方法是使用不同的数据结构(例如字典)来存储颜色信息。然后,您可以使用枚举名称作为字典中的键。以下是如何做到这一点的示例:
class Colors:
RED = 1
GREEN = 2
BLUE = 3
color_info = {
Colors.RED: "The red color",
Colors.GREEN: "The green color",
Colors.BLUE: "The blue color"
}
for color in Colors:
print(color.name, "->", color_info[color])
在这种方法中,您定义一个单独的字典
color_info
,将枚举成员映射到各自的文档字符串。这样,您就可以轻松访问文档字符串,而无需依赖枚举文档字符串的行为。