枚举具有多个属性作为集合常量

时间:2017-09-27 16:55:09

标签: python enums

在最近的一个问题(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)

1 个答案:

答案 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来测试它们)和您可以将名称和值都映射回枚举对象。