天天看点

python面向对象高级编程_Python进阶丨面向对象高级编程 —— 枚举类

枚举类

.

描述

枚举类型可以看作是一种标签或是一系列常量的集合,通常用于表示某些特定的有限集合(例如星期,月份)

在没有专门提供枚举类型的时候,一般通过字典或类实现

Color = {

‘Red' : 1,

'Green':2,

'Blue':3,

}

class Color:

Red = 1

Green = 2

Blue = 31

2

3

4

5

6

7

8

9

10

它的隐患在于可以被修改

使用Enum

使用标准库提供的Enum就可以实现这个功能

from enum import Enum

class Color(Enum):

Red = 1

Green = 2

Blue = 3

print(Color.Red)

print(repr(Color.red))

print(type(Color.red))

print(isinstance(Color.red, Color))1

2

3

4

5

6

7

8

9

10

11

输出

Color.Red

True1

2

3

4

注:枚举类型不可实例化,不可更改

定义枚举

from enum import Enum, unique

@unique

class Color(Enum):

red = 1

green = 2

bule = 31

2

3

4

5

6

7

@unique装饰器可以帮助检查,保证没有重复值

1.可以通过成员名来获取成员,也可以通过成员值之来获取成员

from enum import Enum, unique

@unique

class Color(Enum):

red = 1

green = 2

bule = 3

print(Color['red'])

print(Color(1))1

2

3

4

5

6

7

8

9

10

输出

Color.red

Color.red1

2

2.每个成员都有名称属性和值属性

from enum import Enum, unique

@unique

class Color(Enum):

red = 1

green = 2

bule = 3

me = Color.red

print(me.name)

print(me.value)1

2

3

4

5

6

7

8

9

10

11

输出

red

11

2

3.支持迭代的方式遍历成员

from enum import Enum, unique

@unique

class Color(Enum):

red = 1

green = 2

bule = 3

for color in Color:

print(color)1

2

3

4

5

6

7

8

9

10

11

输出

Color.red

Color.green

Color.bule1

2

3

4.特殊属性__members__是一个将名称映射到成员的有序字典,也可以通过它来完成遍历

from enum import Enum, unique

@unique

class Color(Enum):

red = 1

green = 2

bule = 3

for color in Color.__members__.items():

print(color)1

2

3

4

5

6

7

8

9

10

11

输出

('red', )

('green', )

('bule', )1

2

3