📜  在 python 中枚举(1)

📅  最后修改于: 2023-12-03 15:37:27.272000             🧑  作者: Mango

在 Python 中枚举

在 Python 中,枚举是一种表示固定值集合的数据类型。它可以用来代替原始的常量或者硬编码的值,使得代码更加可读和易于理解。

1. 定义枚举类型

Python 中使用 enum 模块来定义枚举类型。使用 Enum 基类来创建一个新的枚举类型,然后可以定义枚举值。

from enum import Enum

class Color(Enum):
    RED = 1
    GREEN = 2
    BLUE = 3

在上面的例子中,我们定义了一个名为 Color 的枚举类型,它包含三个值 REDGREENBLUE。每个值都有一个隐式的整数值与之关联,可以通过 value 属性访问它。

>>> print(Color.RED)
Color.RED

>>> print(Color.RED.value)
1
2. 迭代枚举值

要迭代一个枚举类型的所有值,可以使用 Enum 基类的 __members__ 字典属性。

for color in Color.__members__:
    print(color)

输出结果为:

RED
GREEN
BLUE
3. 检查字符串是否为有效的枚举值

可以使用 Enum 基类的 __members__ 字典属性和 get() 方法,来检查一个字符串是否为有效的枚举值。

color_name = "RED"
if color_name in Color.__members__:
    color = Color[color_name]
    print(color)

输出结果为:

Color.RED
4. 枚举类型的比较

枚举类型支持比较操作,它们通过 value 属性进行比较。

print(Color.RED == Color.RED)
print(Color.RED == Color.GREEN)

输出结果为:

True
False
5. 枚举值的属性

可以为枚举值定义属性,例如:

class Color(Enum):
    RED = (1, "红色")
    GREEN = (2, "绿色")
    BLUE = (3, "蓝色")
    
    def __init__(self, value, desc):
        self._value_ = value
        self.desc = desc

在上面的例子中,我们为每个颜色定义了一个元组,包括颜色的整数值和文字描述。然后我们在 Color 类中定义了构造函数 __init__(),它将元组中的值设置为枚举值的属性。

>>> print(Color.RED.desc)
红色
6. 自定义枚举值的整数值

在前面的例子中,我们定义的枚举类型,每个值的整数值从 1 开始递增。如果需要自定义枚举值的整数值,可以在定义枚举值时指定它。

from enum import IntEnum

class Color(IntEnum):
    RED = 100
    GREEN = 200
    BLUE = 300

在上面的例子中,我们定义了一个名为 Color 的枚举类型,它包含三个值 REDGREENBLUE。每个值都有一个整数值与之关联,其中 RED 的值为 100,GREEN 的值为 200,BLUE 的值为 300。

>>> print(Color.RED.value)
100
7. 自定义枚举值的字符串值

如果希望自定义枚举值的字符串值,可以在定义枚举值时指定它。

from enum import Enum

class Color(Enum):
    RED = "红色"
    GREEN = "绿色"
    BLUE = "蓝色"

在上面的例子中,我们定义了一个名为 Color 的枚举类型,它包含三个值 REDGREENBLUE。每个值都有一个字符串值与之关联,其中 RED 的值为 "红色",GREEN 的值为 "绿色",BLUE 的值为 "蓝色"。

>>> print(Color.RED.value)
红色