Python中枚举的用法

枚举的结构

from enum import Enum
class Color(Enum):
    RED = 1
    YELLOW = 2
    BLUE = 3

print(Color.RED)
# Color.RED
  • 从enum导入Enum,并让自定义的枚举类继承Enum
  • 枚举类内的标签最好用大写字母来表示常量

 

枚举类与普通类的区别

  • 标签值不可被修改
  • 一个标签只能对应一个值,但多个标签可以对应相同的值(别名)

  以下两种情况都会报错:

from enum import Enum
class Color(Enum):
    RED = 1
    YELLOW = 2
    BLUE = 3

Color.RED = 2
from enum import Enum
class Color(Enum):
    RED = 1
    RED = 2
    YELLOW = 2
    BLUE = 3

 

枚举类型、枚举名称、枚举值之间的区别

from enum import Enum
class Color(Enum):
    RED = 1
    YELLOW = 2
    BLUE = 3

print(Color.RED)
print(type(Color.RED))
# Color.RED
# <enum 'Color'>
print(Color.RED.name)       # 获取枚举类型的名称
print(type(Color.RED.name))
# RED
# <class 'str'>
print(Color.RED.value)      # 获取枚举类型的真实值
print(type(Color.RED.value))
# 1
# <class 'int'>

 

  枚举类型可以用读取字典的方式来读取,并且可以遍历:

from enum import Enum
class Color(Enum):
    RED = 1
    YELLOW = 1
    BLUE = 3

print(Color['RED']) # 访问
for e in Color:     # 遍历
    print(e)


# 当多个标签对应相同值时,第一个定义的为主名,其他的为别名
# 直接遍历无法输出别名,可以用__members__来全部输出
for e in Color.__members__:
    print(e)

 

枚举类型间的比较

  枚举类型可以做等值比较和身份比较,但是不能做大小比较:

from enum import Enum
class Color(Enum):
    RED = 1
    YELLOW = 1
    BLUE = 3

print(Color.RED == Color.YELLOW)
# True
print(Color.RED is Color.YELLOW)
# True

 

将数字转换为枚举类型

from enum import Enum
class Color(Enum):
    RED = 1
    YELLOW = 1
    BLUE = 3

e = Color(1) # 根据数字来找到对应的枚举类型
print(e)
# Color.RED

 

其他

  规定枚举类型对应值只能是数字:

from enum import IntEnum  # 使用IntEnum
class Color(IntEnum):
    RED = 1
    YELLOW = 2
    BLUE = 3

  

  规定不可取别名(每个标签必须对应不同值):

from enum import Enum,unique  # 使用unique装饰器
@ unique
class Color(Enum):
    RED = 1
    YELLOW = 2
    BLUE = 3

 

posted @ 2020-08-14 17:23  叶迩  阅读(6583)  评论(0编辑  收藏  举报