如何在字典中的枚举中添加文档字符串

Fli*_*ser 3 python documentation enums

我在字典中使用枚举:

Parameters = {
    ONE: Enum(
        value = 'Options',
        names = [
            ('SEPARATE', 0b1),
            ('SEQUENTIAL', 0b0)
        ]
    )
}
Run Code Online (Sandbox Code Playgroud)

这种风格的作品非常适合我的需求。

但是,当以不同的方式使用枚举时,我可以添加文档字符串:

class ONE(Enum):
    SEPERATE = 0b1
    """The registers associated with each port are separated into different banks"""
    SEQUENTIAL = 0b0
    """The registers are in the same bank (addresses are sequential)"""
Run Code Online (Sandbox Code Playgroud)

那么我的问题是:

如第一个示例所示,在字典中使用枚举时如何添加文档字符串?

更新 测试枚举

Parameters = {
    'ONE': Enum(
        value = 'ONE',
        names = [
            ('SEPARATE', 0b1),
            ('SEQUENTIAL', 0b0)
        ]
    )
}

print(Parameters['ONE'].SEPARATE)
Run Code Online (Sandbox Code Playgroud)

按预期工作

然后尝试扩展 Enum()

class NewEnum(Enum):
    def __init__(self, **kw):
        super(NewEnum, self).__init__(**kw)


Parameters = {
    'ONE': NewEnum(
        value = 'ONE',
        names = [
            ('SEPARATE', 0b1),
            ('SEQUENTIAL', 0b0)
        ]
    )
}
Run Code Online (Sandbox Code Playgroud)

不起作用。

Eth*_*man 5

您不是在设置文档字符串,而是在编写注释:

>>> from enum import Enum
>>> class ONE(Enum):
...     SEPERATE = 0b1
...     """The registers associated with each port are separated into different banks"""
...     SEQUENTIAL = 0b0
...     """The registers are in the same bank (addresses are sequential)"""
... 
>>> ONE.SEPERATE.__doc__
'An enumeration.'
Run Code Online (Sandbox Code Playgroud)

所以,最简单的方法就是添加真实的评论:

Parameters = {
    ONE: Enum(
        value = 'Options',
        names = [
            ('SEPARATE', 0b1),   # The registers associated with each port are separated into different banks
            ('SEQUENTIAL', 0b0)  # The registers are in the same bank (addresses are sequential)
        ]
    )
}
Run Code Online (Sandbox Code Playgroud)

实际上__doc__使用type()格式添加可能有点困难——我会研究一下。


好的,这是自定义枚举EnumWithDocstring

class EnumWithDocstring(Enum):
    #
    def __new__(cls, value, doc=None):
        member = object.__new__(cls)
        member._value_ = value
        member.__doc__ = doc
        return member
Run Code Online (Sandbox Code Playgroud)

新的 Enum 并没有什么特别的地方;棘手的部分是意识到传递给 Enum 构造函数的所有值都必须是 a tuple,因此您的Parameters结果将如下所示:

Parameters = {
    'ONE': EnumWithDocstring(
        value = 'Options',
        names = [
            ('SEPARATE', (0b1, 'test docstring')),
            ('SEQUENTIAL', 0b0)
        ]
    )
}
Run Code Online (Sandbox Code Playgroud)

SEPARATE有文档字符串,但SEQUENTIAL没有。


声明:我是Python stdlibEnumenum34backportAdvanced Enumeration ( aenum)库的作者 。

  • 核心 python 语言不支持每个成员的文档字符串,这让我很困扰。 (3认同)