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)
不起作用。
您不是在设置文档字符串,而是在编写注释:
>>> 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 stdlibEnum、enum34backport和Advanced Enumeration ( aenum)库的作者 。
| 归档时间: |
|
| 查看次数: |
1586 次 |
| 最近记录: |