python3中的枚举

枚举

前言

  • 个人学习笔记,仅供本人复习使用
  • 主要内容来自7七月
  • 第一次记录时间:2020年2月13日

一、定义枚举

对于vip钻石颜色表示

from enum import Enum


class VIP(Enum):
   YELLOW = 1
   GREEN = 2
   BLACK = 3
   RED = 4
# 赋值时也可以是不相等的字符串

print(VIP.YELLOW)

#输出
VIP.YELLOW

枚举就是一个
所以枚举类型都是enum模块下Enum类的子类
枚举的标识推荐大写字母
枚举的意义:重在标签而不是数值

其他实现方法:

# 模块中定义变量
YELLOW = 1
GREEN = 2
BLACK = 3
RED = 4

# 使用字典
{
   "YELLOW": 1,
   "GREEN": 2,
   "BLACK": 3,
   "RED": 4
}

# 使用类封装数据


class TypeDiamod():


YELLOW = 1
GREEN = 2
BLACK = 3
RED = 4

缺点:

  • 可变性
  • 没有防止相同标签的功能

二、枚举类型、枚举名称与枚举值

from enum import Enum


class VIP(Enum):
    YELLOW = 1
    GREEN = 2
    BLACK = 3
    RED = 4


print(type(VIP.YELLOW))
print(VIP.YELLOW.name)
print(type(VIP.YELLOW.name))
print(VIP.YELLOW.value)
print(type(VIP.YELLOW.value))
print(VIP["YELLOW"])

#输出

<enum 'VIP'> # 表示枚举类型
YELLOW # 枚举名称,标签名
<class 'str'> # 枚举名称的类型:字符串
2 #枚举值
<class 'int'>
VIP.YELLOW # 枚举类型

三、枚举的比较运算

等值比较运算

print(VIP.YELLOW == VIP.YELLOW)

# 输出
True
  • 不支持大小比较<>
  • 枚举类型只能和枚举类型之间作比较
  • 支持身份比较,is
  • 不同枚举的等值比较是False,因为他们的枚举类都不一样
    枚举遍历
from enum import Enum


class VIP(Enum):
   YELLOW = 1
   GREEN = 2
   BLACK = 3
   RED = 4


for v in VIP:
   print(v)

# 输出
VIP.YELLOW
VIP.GREEN
VIP.BLACK
VIP.RED

四、注意事项

枚举的注意事项:

  • 枚举的key值不可以相同,但vlaule值可以相同
    当vlaule值相同时,第二个key,就是第一个的别名
  • 当用for遍历打印时,别名是不会被打印出来的
    如果需要全部打印出来,需要用到内置方法
    vip.__members__.items()
    vip.__members__

Enum:不限制枚举类型数值的数据类型
IntEnum:限制枚举类型数值必须为整形
枚举类型是单例模式(23种设计模式中的一种),不能实例化
加上装饰器 unique :规定两个不同的枚举类型不能取相同数值

from enum import Enum
from enum import IntEnum, unique


@unique
class VIP(IntEnum):
    YELLOW = 1
    GREEN = 1
    BLACK = 3
    RED = 4
    # 输出
    ValueError: duplicate values found in <enum 'VIP'>: GREEN -> YELLOW

你可能感兴趣的:(python基础)