2017-09-27 7 views
3

最近の質問(Gathering numerical data from a string input)では、これが受け入れられる回答かどうか疑問に思っていました。私はそれがより良い質問をするだろうと思った。この種の表現は一定のコレクションとして受け入れられますか?それともenumの誤用ですか?そして、Pythonのenumの異なる属性に同じ値を代入すると、予期せぬ結果が出ますか?複数の属性をコレクション定数として持つ列挙型

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] wo 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]) 

あなたは、このような明示的な別名、列挙型の値がシングルトンであるという事実(あなたがそれらをテストするためにisを使用することができます)として、あなたは両方をマッピングすることができ、このような定義が提供する他の機能を、必要なときenumを使用します名前と値をenumオブジェクトに戻します。

関連する問題