📜  Python枚举模块enum(1)

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

Python枚举模块enum

简介

Python枚举模块(enum)提供了一种创建枚举类的方式,枚举成员是唯一的、不可变的、可比较的,可以使用枚举成员访问枚举常量。枚举可以提高代码可读性和可维护性。

安装

Python 3.4及以上版本自带enum模块,无需安装。如果使用的是Python 2.x版本,可以使用enum34模块。

安装命令:pip install enum34

基本语法
from enum import Enum
class 枚举类名(Enum):
    枚举成员1 = 值1
    枚举成员2 = 值2
    …
    枚举成员n = 值n

枚举成员值可以是任意类型(一般是字符串或整数)。

示例
from enum import Enum

class VIP(Enum):
    BASIC = "Basic"
    SILVER = "Silver"
    GOLD = "Gold"
    PLATINUM = "Platinum"
    DIAMOND = 10

print(VIP.BASIC)
print(VIP.PLATINUM)
print(VIP.DIAMOND.value)

for v in VIP:
    print(v)

输出结果:

VIP.BASIC
VIP.PLATINUM
10
VIP.BASIC
VIP.SILVER
VIP.GOLD
VIP.PLATINUM
VIP.DIAMOND
特殊方法
__len__

获取枚举成员数量。

from enum import Enum

class VIP(Enum):
    BASIC = "Basic"
    SILVER = "Silver"
    GOLD = "Gold"
    PLATINUM = "Platinum"
    DIAMOND = 10

print(len(VIP))

输出结果:

5
__contains__

判断枚举是否包含某个成员。

from enum import Enum

class VIP(Enum):
    BASIC = "Basic"
    SILVER = "Silver"
    GOLD = "Gold"
    PLATINUM = "Platinum"
    DIAMOND = 10

print(VIP.BASIC in VIP)
print("Basic" in VIP)

输出结果:

True
False
__getitem__

通过枚举成员值获取枚举成员。

from enum import Enum

class VIP(Enum):
    BASIC = "Basic"
    SILVER = "Silver"
    GOLD = "Gold"
    PLATINUM = "Platinum"
    DIAMOND = 10

print(VIP["BASIC"])
print(VIP(10))

输出结果:

VIP.BASIC
VIP.DIAMOND
自定义枚举类

枚举类可以继承自Enum,并可以自定义方法和属性,具有更大的灵活性。

from enum import Enum

class VIP(Enum):
    BASIC = "Basic"
    SILVER = "Silver"
    GOLD = "Gold"
    PLATINUM = "Platinum"
    DIAMOND = 10

    def describe(self):
        return self.name, self.value

    @property
    def points(self):
        if self.value == "Basic":
            return 1
        elif self.value == "Silver":
            return 3
        elif self.value == "Gold":
            return 5
        elif self.value == "Platinum":
            return 7
        elif self.value == 10:
            return 10
        else:
            return 0

print(VIP.DIAMOND.describe())
print(VIP.GOLD.points)

输出结果:

('DIAMOND', 10)
5
小结

Python枚举模块enum提供了一种创建枚举类的方式,枚举成员是唯一的、不可变的、可比较的,可以提高代码可读性和可维护性。枚举成员值可以是任意类型,枚举类可以自定义方法和属性,具有更大的灵活性。