python枚举法怎么写(Python3.7知其然知其所以然-第二十一章)
python枚举法怎么写(Python3.7知其然知其所以然-第二十一章)# 引入枚举类和唯一装饰器 from enum import Enum unique @unique class 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)跟整型一样,是一种数据类型。它是一系列常量的集合,通常用于表示某些特定的有限集合,如月份、星期、状态、性别(男、女、不男不女)等,当一个变量有几种可能取值的时候,定义为枚举类型。
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 = 4 Fri = 5 Sat = 6 print(Weekday.Sat.value) 21.4 枚举取值
枚举可通过成员获取它的名称和值,可通过名称或值获取成员。
# 引入枚举类和唯一装饰器 from enum import Enum unique @unique class 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 = 4 red_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 = 4 red_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)