我知道在Python中常量是通过大写变量名隐含的,但不是强制的。我还了解到,通过从 Enum 子类化,类可以实现枚举类型,从而防止单个枚举值被覆盖。
在我看来,这两个习惯用法似乎有些矛盾,我想知道 Enum 解决方案如何强制对变量值进行只读访问。
Python 的 Enum 类创建不可变的枚举成员,一旦定义就无法更改。这是通过覆盖 Enum 类中的
__setattr__
方法来强制执行的,如果您尝试重新分配成员的值,则会引发 AttributeError。
from enum import Enum
class Color(Enum):
RED = 1
GREEN = 2
BLUE = 3
# Accessing a member
print(Color.RED) # Outputs: Color.RED
# Attempting to change a member's value raises an error
try:
Color.RED = 10
except AttributeError as e:
print(f"Cannot modify Enum member: {e}")