楼主: 时光人
1087 6

[网帖精选] Python3.7知其然知其所以然-第二十一章 枚举类型 [推广有奖]

  • 3关注
  • 34粉丝

已卖:166份资源

院士

23%

还不是VIP/贵宾

-

威望
1
论坛币
26914 个
通用积分
429.9324
学术水平
95 点
热心指数
109 点
信用等级
91 点
经验
39970 点
帖子
1630
精华
3
在线时间
580 小时
注册时间
2019-2-25
最后登录
2025-5-6

楼主
时光人 学生认证  发表于 2019-9-23 10:37:15 |AI写论文

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

求职就业群
赵安豆老师微信:zhaoandou666

经管之家联合CDA

送您一个全额奖学金名额~ !

感谢您参与论坛问题回答

经管之家送您两个论坛币!

+2 论坛币


CDA数据分析:数据科学、人工智能从业者的在线大学。
数据科学(Python/R/Julia)数据分析、机器学习、深度学习 Q群:874447702





枚举(Enum)跟整型一样,是一种数据类型。它是一系列常量的集合,通常用于表示某些特定的有限集合,如月份、星期、状态、性别(男、女、不男不女)等,当一个变量有几种可能取值的时候,定义为枚举类型。

21.1枚举定义

枚举是不可变类型,一旦定义创建,其成员的值不可改变,名称不可重复,通过class关键字和继承Enum类进行定义。定义时若出现成员的值相同,那只有第一个有效,其语法结构为:

class枚举名(Enum):

成员名1 =值1

成员名x =值n

# ---引入枚举类---

from enum import Enum

class Colors(Enum):

red = 1

orange = 2

yellow = 3

green = 4

red_alias = 1

print(Colors(1))

21.2整型枚举

枚举成员的值支持多种数据类型,如字符串、布尔或整型等,如要指定为整型,可继承IntEnum类。注意,就算指定为IntEnum,其成员的值照样可以为字符串等,但在获取成员的值时,会进行自动转换,如果转换失败,会报错。当然,既然指定为整型了,就不要故意指定为字符串等了。

# ---引入枚举类---

from enum import Enum, IntEnum

# 字符串枚举

class Gender(Enum):

Male = "男"

Female = "女"

Unknown ="保密"

print(Gender.Male.value)

#整型枚举classNumber(IntEnum):

One = 1

Two = 2

# 会自动转为整型

Three = "3"

print(Number.Three.value)

21.3唯一值

如果要限制定义枚举时,不能定义相同值的成员。可以使用装饰器@unique进行限制。如若出现相同值,运行时会报错。

# 引入枚举类和唯一装饰器

from enum import Enum, unique

@unique

class Weekday(Enum):

Sun = 0

Mon = 1

Tue = 2

Wed = 3

Thu =4

Fri =5

Sat = 6

print(Weekday.Sat.value)

21.4枚举取值

枚举可通过成员获取它的名称和值,可通过名称或值获取成员。

#引入枚举类和唯一装饰器fromenumimportEnum, unique

@unique

classMonths(Enum):

Jan = 1

Feb = 2

Mar = 3

Apr = 4

May = 5

Jun = 6

Jul = 7

Aug = 8

Sep = 9

Oct = 10

Nov = 11

Dec = 12

#通过成员获取名称和值print(Months.Jan.name, Months.Jan.value)

# 通过名称和值获取成员

print(Months["Feb"], Months(2))

21.5枚举遍历

通过for循环遍历枚举成员时,如若出现成员的值相同时,只获取第一个成员。当然,如果要遍历所有成员的话,得用特殊的方式获取,就是通过__menbers__属性。

# ---引入枚举类---

from enum import Enum

class Colors(Enum):

red = 1

orange = 2

yellow = 3

green =4

red_alias =1

#获取成员名称,值相等的,只获取第一个forcolorinColors:

print(color.name)

#获取所有成员名称forcolorinColors.__members__:

print(color)

21.6枚举比较



二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝


已有 1 人评分经验 收起 理由
cheetahfly + 100 观点有启发

总评分: 经验 + 100   查看全部评分

沙发
时光人 学生认证  发表于 2019-9-23 10:38:02

枚举成员不可以比较大小,但可以通过is、is not和==、!=进行同性或等值比较。

# ---引入枚举类---

from enum import Enum

class Colors(Enum):

red = 1

orange = 2

yellow = 3

green =4

red_alias =1

# is判断result = Colors.redisColors.red

print(result)

# is not判断

result = Colors.red is not Colors.green

print(result)

# ==比较值是否相等

result = Colors.red == Colors.red_alias

print(result)

# !=比较值是否不相等

result = Colors.red != Colors.green

print(result)

21.7类中枚举

枚举可以定义在类里,并可通过类名和枚举名进行调用。

# ---引入枚举类---

from enum import Enum

class Plane:

def __init__(self, color):

self.color = color

# 类的成员

class Colors(Enum):

Red = 1

Orange = 2

Yellow = 3

Green = 4

Blue = 5

plane = Plane(Plane.Colors.Blue.value)

print(plane.color)


藤椅
时光人 学生认证  发表于 2019-9-23 11:57:12

板凳
时光人 学生认证  发表于 2019-9-23 11:57:48

报纸
时光人 学生认证  发表于 2019-9-23 11:58:09

地板
时光人 学生认证  发表于 2019-9-23 11:58:47

7
jinlu310 在职认证  发表于 2019-9-24 14:43:53
感谢分享!

您需要登录后才可以回帖 登录 | 我要注册

本版微信群
加好友,备注cda
拉您进交流群
GMT+8, 2026-2-13 05:31