Why are mutable values in Python Enums the same object?の続きです。Python Enumで可変値が許可されるのはなぜですか?
Enum
の値が可変であれば(例えば、list
sなど)、これらの値はいつでも変更できます。私は通常のPythonのイディオム与えられ、これは大丈夫だと思う
>>> 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
、と私はEnum
メンバーが誰かがうっかり彼が見上げEnum
の値を変更する場合は特に、値によって取得された場合、これは問題の何かをもたらすと思いますその意味はユーザーがの場合はEnum
のようにmutablesを使用しますが、開こうとしているワームの可能性を理解するだけです。
しかし、これは値によってEnum
メンバーを検索することができ、その値は変更可能であるため、ハッシュマップ以外の手段でルックアップを実行する必要があります/ dict
そのようなdict
ではkey
となります。
Enum
の値を変更可能なタイプのみに制限すると、値の参照がdict
で実装されるように、より効率的ではありません(ただし、付与される可能性は低くなります)。