2017-09-27 22 views
3

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

回答

3

枚举是唯一的名称和独特的价值之间关联。支持多次使用一个值,但可能不是您想要的值。这在文档中有明确的规定,请参阅Duplicating enum members and values section

[T]允许enum成员具有相同的值。鉴于两个成员A和B具有相同值(和规定第一),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来测试他们的),并且可以在地图上都名称和值返回枚举对象。