提示:本文共有 2143 个字,阅读大概需要 5 分钟。
枚举(Enum)跟整型一样,是一种数据类型。它是一系列常量的集合,通常用于表示某些特定的有限集合,如月份、星期、状态、性别(男、女、不男不女)等,当一个变量有几种可能取值的时候,定义为枚举类型。
21.1 枚举定义
枚举是不可变类型,一旦定义创建,其成员的值不可改变,名称不可重复,通过class关键字和继承Enum类进行定义。定义时若出现成员的值相同,那只有第一个有效,其语法结构为:
class 枚举名(Enum):
成员名1 = 值1
成员名x = 值n
# ---引入枚举类---
from enum import Enum
class Colors(Enum):
red = 1
orange = 2
yellow = 3
green = 4
red_alias = 1
print(Colors(1))
21.2 整型枚举
枚举成员的值支持多种数据类型,如字符串、布尔或整型等,如要指定为整型,可继承IntEnum类。注意,就算指定为IntEnum,其成员的值照样可以为字符串等,但在获取成员的值时,会进行自动转换,如果转换失败,会报错。当然,既然指定为整型了,就不要故意指定为字符串等了。
# ---引入枚举类---
from enum import Enum, IntEnum
# 字符串枚举
class Gender(Enum):
Male = "男"
Female = "女"
Unknown = "保密"
print(Gender.Male.value)
# 整型枚举class Number(IntEnum):
One = 1
Two = 2
# 会自动转为整型
Three = "3"
print(Number.Three.value)
21.3 唯一值
如果要限制定义枚举时,不能定义相同值的成员。可以使用装饰器@unique进行限制。如若出现相同值,运行时会报错。
# 引入枚举类和唯一装饰器
from enum import Enum, unique
@unique
class Weekday(Enum):
Sun = 0
Mon = 1
Tue = 2
Wed = 3
Thu = 4Fri = 5
Sat = 6
print(Weekday.Sat.value)
21.4 枚举取值
枚举可通过成员获取它的名称和值,可通过名称或值获取成员。
# 引入枚举类和唯一装饰器from enum import Enum, unique
@uniqueclass Months(Enum):
Jan = 1
Feb = 2
Mar = 3
Apr = 4
May = 5
Jun = 6
Jul = 7
Aug = 8
Sep = 9
Oct = 10
Nov = 11
Dec = 12
# 通过成员获取名称和值print(Months.Jan.name, Months.Jan.value)
# 通过名称和值获取成员
print(Months["Feb"], Months(2))
21.5 枚举遍历
通过for循环遍历枚举成员时,如若出现成员的值相同时,只获取第一个成员。当然,如果要遍历所有成员的话,得用特殊的方式获取,就是通过__menbers__属性。
# ---引入枚举类---
from enum import Enum
class Colors(Enum):
red = 1
orange = 2
yellow = 3
green = 4red_alias = 1
# 获取成员名称,值相等的,只获取第一个for color in Colors:print(color.name)
# 获取所有成员名称for color in Colors.__members__:
print(color)
21.6 枚举比较
枚举成员不可以比较大小,但可以通过is、is not 和==、!=进行同性或等值比较。
# ---引入枚举类---
from enum import Enum
class Colors(Enum):
red = 1
orange = 2
yellow = 3
green = 4red_alias = 1
# is 判断result = Colors.red is Colors.red
print(result)
# is not判断
result = Colors.red is not Colors.green
print(result)
# ==比较值是否相等
result = Colors.red == Colors.red_alias
print(result)
# !=比较值是否不相等
result = Colors.red != Colors.green
print(result)
21.7 类中枚举
枚举可以定义在类里,并可通过类名和枚举名进行调用。
# ---引入枚举类---
from enum import Enum
class Plane:
def __init__(self, color):
self.color = color
# 类的成员
class Colors(Enum):
Red = 1
Orange = 2
Yellow = 3
Green = 4
Blue = 5
plane = Plane(Plane.Colors.Blue.value)print(plane.color)
看到此处说明本文对你还是有帮助的,关于“python之枚举类型”留言是大家的经验之谈相信也会对你有益,推荐继续阅读下面的相关内容,与本文相关度极高!