これは、Python Enums のミュータブルな値が同じオブジェクトである理由の続きです。.
an の値Enum
が変更可能な場合 ( list
s など)、それらの値はいつでも変更できます。Enum
メンバーが値によって取得される場合、特に誰かがうっかりして検索した値を変更した場合、これは問題を引き起こすと思いますEnum
。
>>> from enum import Enum
>>> class Color(Enum):
black = [1,2]
blue = [1,2,3]
>>> val_1 = [1,2]
>>> val_2 = [1,2,3]
>>> Color(val_1)
<Color.black: [1, 2]>
>>> Color(val_2)
<Color.blue: [1, 2, 3]>
>>> my_color = Color(val_1)
>>> my_color.value.append(3)
>>> Color(val_2)
<Color.black: [1, 2, 3]>
>>> Color(val_1)
Traceback (most recent call last):
...
ValueError: [1, 2] is not a valid Color
Python の通常のイディオムを考えると、これは問題ないと思います。これは、ユーザーがミュータブルを値として使用できることを意味しますが、開いEnum
ている可能性のあるワームの缶を理解するためだけです。
ただし、これにより 2 番目の問題が発生します。メンバーを値で検索でき、値が可変である可能性があるためEnum
、ハッシュマップ/ 以外の方法で検索を行う必要があります。dict
key
dict
値によるルックEnum
アップをdict
?