這是Why are mutable values in Python Enums the same object?的後續內容。爲什麼在Python Enums中允許可變值?
如果Enum
的值是可變的(例如list
等),則可以隨時更改這些值。我想,這提出了一個問題的東西,如果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
值,但僅僅是爲了理解它們可能打開的蠕蟲罐。
然而這帶來了第二個問題 - 因爲你可以按值查找一個Enum
memeber,和值可以是可變的,它必須比一個HashMap/dict
之外的方式做的查找,因爲可變不能在這樣的dict
中是key
。
將Enum
的值限制爲僅可變類型的效率會不會更高效(雖然授予了靈活性),以便可以使用dict
來實現按值查找?