在最近的一个问题(Gathering numerical data from a string input)中,我想知道这是否是一个可接受的答案。我认为这会成为一个更好的问题。这种表现形式是否可以作为常量集合接受?还是滥用枚举?将相同的值分配给Python中枚举的不同属性会产生什么意外后果吗?
from enum import Enum
class CreditRating(Enum):
AAA = 0.01
A = 0.1
B = 0.1
creditRate = input("Please enter credit rating:")
print(CreditRating[creditRate].value)
答案 0 :(得分:3)
枚举是唯一名称和唯一值之间的关联。支持使用多次值,但可能不是您想要的意思。文档中明确说明了这一点,请参阅Duplicating enum members and values section:
[T] wo enum成员被允许具有相同的值。给定两个具有相同值的成员A和B(并且A首先定义),B是A的别名。
结果是按值查找名称,只会返回名字:
>>> CreditRating(0.1)
<CreditRating.A: 0.1>
当您查看B
时,您将获得A
枚举对象:
>>> CreditRating.B
<CreditRating.A: 0.1>
如果您只想将字符串映射到某个值,我就不会使用枚举,只需使用字典:
credit_ratings = {
'AAA': 0.01,
'A': 0.1,
'B': 0.1,
}
# ...
print(credit_ratings[creditRate])
当您需要定义提供的其他功能时使用enum
,例如显式别名,枚举值为单例的事实(您可以使用is
来测试它们)和您可以将名称和值都映射回枚举对象。