2017-09-27 61 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來測試他們的),並且可以在地圖上都名稱和值返回枚舉對象。