python----枚举

1.枚举的定义

首先,定义枚举要导入enum模块。
枚举定义用class关键字,继承Enum类。
用于定义枚举的class和定义类的class是有区别
例如:

from enum import Enum

class Color(Enum):
    red = 1
    orange = 2
    yellow = 3
    green = 4
    blue = 5
    indigo = 6
    purple = 7

代码分析:
1.上面的代码我们定义了颜色的枚举Color.
2.颜色枚举有7个成员.
3.每一个成员都有他们各自的名称和值.color.red成员的名称是:red,值是:1.
4每个成员的数据类型就是他所属的枚举.【注:用class定义的类,实际上就是一种类型
**1.1**1 定义枚举时,成员名称不允许重复

from enum import Enum

class Color(Enum):
    red = 1
    red = 2

上面的代码,就无法执行。提示错误:TypeError: Attempted to reuse key: ‘red’

 1.2 默认情况下,不同的成员值允许相同。但是两个相同值的成员,第二个成员的名称被视作第一个成员的别名 
 

from enum import Enum

class Color(Enum):
    red = 1
    red_alias = 1

成员Color.red和Color.red_alias具有相同的值,那么成员Color.red_alias的名称red_alias就被视作成员Color.red名称red的别名。

1.3 如果枚举中存在相同值的成员,在通过值获取枚举成员时,只能获取到第一个成员

from enum import Enum

class Color(Enum):
    red = 1
    red_alias = 1

print(Color(1))

 输出结果为:Color.red
 1.4 如果要限制定义枚举时,不能定义相同值的成员。可以使用装饰器@unique【要导入unique模块】
 

from enum import Enum, unique
@unique
class Color(Enum):
    red = 1
    red_alias = 1

 再执行就会提示错误:ValueError: duplicate values found in

2.枚举取值

2.1通过成员的名称来获取成员

Color['red']

2.2 通过成员值来获取成员

Color(2)

2.3 通过成员,来获取它的名称和值

red_member = Color.red
red_member.name
red_member.value

3. 迭代器

3.1 枚举支持迭代器,可以遍历枚举成员

for color in Color:
    print(color)

 输出结果是,枚举的所有成员。Color.red、Color.orange、Color.yellow、Color.green、Color.blue、Color.indigo、Color.purple.

3.2 如果枚举有值重复的成员,循环遍历枚举时只获取值重复成员的第一个成员

from enum import Enum


class Color(Enum):
    red = 1
    orange = 2
    yellow = 3
    green = 4
    blue = 5
    indigo = 6
    purple = 7
    red_alias = 1


for color in Color:
    print(color)

  输出结果是:Color.red、Color.orange、Color.yellow、Color.green、Color.blue、Color.indigo、Color.purple。但是Color.red_alias并没有出现在输出结果中

 3.3 如果想把值重复的成员也遍历出来,要用枚举的一个特殊属性members

from enum import Enum


class Color(Enum):
    red = 1
    orange = 2
    yellow = 3
    green = 4
    blue = 5
    indigo = 6
    purple = 7
    red_alias = 1


for color in Color.__members__.items():
    print(color)

输出结果:(‘red’,

扫描二维码关注公众号,回复: 1259333 查看本文章

4. 枚举比较

 4.1 枚举成员可进行同一性比较

Color.red is Color.red

输出结果是:True

Color.red is not Color.blue

输出结果是:True

4.2 枚举成员可进等值比较

Color.blue == Color.red

输出结果是:False

Color.blue != Color.red

 输出结果是:True

4.3 枚举成员不能进行大小比较

Color.red < Color.blue

输出结果出错:TypeError: unorderable types: Color() < Color()
但是可以比较成员的值
例如:

color.red.value>color.green.value

输出结果为:False

枚举相对来讲还是比较是容易的,就好比一个库 你去调用里面的东西,而且 防止出错,因为成员比较唯一,所以不会有其他的东西掺杂进来
比如说我建造一个星期的枚举,只有7个,周一到周日,当我用的时候,就不会蹦出来星期八

猜你喜欢

转载自blog.csdn.net/weixin_42067855/article/details/80458818