1.定义
枚举类的基本定义如下:
from enum import Enum
class Sex(Enum):
male = 1
female = 2
这里定义了性别Sex这个枚举类,该类有male、female这2个成员。其中,male的值为1, female的值为2
1.1 枚举类的成员名称不允许重复
from enum import Enum
class Sex(Enum):
male = 1
female = 2
male = 3
运行该枚举类会报错
TypeError: Attempted to reuse key: 'male'
1.2 枚举类的成员值允许相同
from enum import Enum
class Sex(Enum):
male = 1
female = 1
此时,male和female具有相同的值, female就会被当做是male的别名
1.3 通过装饰器可以限制枚举内不允许成员值相同
from enum import Enum, unique
@unique
class Sex(Enum):
male = 1
female = 1
此时,运行该枚举类会报错:
ValueError: duplicate values found in <enum 'Sex'>: female -> male
1.4 限制枚举类的成员值只能为整数
from enum import IntEnum, unique
@unique
class Sex(IntEnum):
male = 1
female = 2
此时枚举类的成员值也可以为整数字符串类型
from enum import IntEnum, unique
@unique
class Sex(IntEnum):
male = '1'
female = '2'
如果不是整数或者整数类型的字符串,则会报错
from enum import IntEnum, unique
@unique
class Sex(IntEnum):
male = '1'
female = 'str'
报错如下:
ValueError: invalid literal for int() with base 10: 'str'
2.取值
2.1 获取成员
2.1.1 通过成员名称来获取成员
print(Sex.male)
result:
Sex.male
2.1.2 通过成员值来获取成员
print(Sex(1))
result:
Sex.male
2.2 获取成员名称
2.2.1 通过成员名称来获取成员
print(Sex.male.name)
result:
male
2.2.2 通过成员值来获取成员
print(Sex(1).name)
result:
male
2.3 获取成员值
2.3.1 通过成员名称来获取成员
print(Sex.male.value)
result:
1
2.3.2 通过成员值来获取成员
print(Sex(1).value)
result:
1
2.4 获取所有成员名称列表
print(Sex.__members__)
result:
OrderedDict([('male', <Sex.male: 1>), ('female', <Sex.female: 2>)])
2.5 获取所有成员名称列表
print(Sex._member_names_)
result:
['male', 'female']
2.5 获取所有成员值列表
print(list(map(int, Sex.__members__.values())))
result:
[1, 2]
3.迭代
3.1 遍历枚举成员
from enum import IntEnum, unique
@unique
class Sex(IntEnum):
male = 1
female = 2
for sex in Sex:
print(sex)
result:
Sex.male
Sex.female
3.2 遍历成员值重复的枚举类
from enum import IntEnum
class Sex(IntEnum):
male = 1
female = 1
for sex in Sex:
print(sex)
result:
Sex.male
默认情形下,只会遍历到值重复的第一个成员,其余的就不会遍历出来
可以通过members属性遍历出值重复的成员来
for sex in Sex.__members__.items():
print(sex)
result:
('male', <Sex.male: 1>)
('female', <Sex.male: 1>)
4.比较
from enum import IntEnum
class Sex(IntEnum):
male = 1
female = 2
4.1 同一性的比较
print(Sex.male is Sex.male)
result:
True
print(Sex.male is Sex.female)
result:
False
4.2 比较是否相等
print(Sex.male == Sex.male)
result:
True
print(Sex.male == Sex.female)
result:
False
print(Sex.male != Sex.female)
result:
True
4.3 比大小
print(Sex.male < Sex.female)
result:
True