第8天 | 12天搞定Python,面向对象( 三 )
输出结果
Colors.red
2. 整型枚举
枚举成员的值支持多种数据类型 , 如字符串、布尔或整型等 , 如要指定为整型 , 可继承IntEnum类 。 注意 , 就算指定为IntEnum,其成员的值照样可以为字符串等 , 但在获取成员的值时 , 会进行自动转换 , 如果转换失败 , 会报错 。 当然 , 既然指定为整型了 , 就不要故意指定为字符串等了 。
# ---引入枚举类---from enum import Enum, IntEnum# 字符串枚举class Gender(Enum):Male = "男"Female = "女"Unknown = "保密"print(Gender.Male.value)# 整型枚举class Number(IntEnum):One = 1Two = 2# 会自动转为整型Three = "3"print(Number.Three.value)
输出结果
男3
3. 唯一值
如果要限制定义枚举时 , 不能定义相同值的成员 。 可以使用装饰器@unique进行限制 。 如若出现相同值 , 运行时会报错 。
# 引入枚举类和唯一装饰器from enum import Enum, unique@uniqueclass Weekday(Enum):Sun = 0Mon = 1Tue = 2Wed = 3Thu = 4Fri = 5Sat = 6print(Weekday.Sat.value)
输出结果
6
4. 枚举取值
枚举可通过成员获取它的名称和值 , 可通过名称或值获取成员 。
# 引入枚举类和唯一装饰器from enum import Enum, unique@uniqueclass Months(Enum):Jan = 1Feb = 2Mar = 3Apr = 4May = 5Jun = 6Jul = 7Aug = 8Sep = 9Oct = 10Nov = 11Dec = 12# 通过成员获取名称和值print(Months.Jan.name, Months.Jan.value)# 通过名称和值获取成员print(Months["Feb"], Months(2))
输出结果
Jan 1Months.Feb Months.Feb
5. 枚举遍历
通过for循环遍历枚举成员时 , 如若出现成员的值相同时 , 只获取第一个成员 。 当然 , 如果要遍历所有成员的话 , 得用特殊的方式获取 , 就是通过__menbers__属性 。
# ---引入枚举类---from enum import Enumclass Colors(Enum):red = 1orange = 2yellow = 3green = 4red_alias = 1# 获取成员名称 , 值相等的,只获取第一个for color in Colors:print(color.name)# 获取所有成员名称for color in Colors.__members__:print(color)
输出结果
redorangeyellowgreenredorangeyellowgreenred_alias
6. 枚举比较
枚举成员不可以比较大小 , 但可以通过is、is not 和==、!=进行同性或等值比较 。
# ---引入枚举类---from enum import Enumclass Colors(Enum):red = 1orange = 2yellow = 3green = 4red_alias = 1# is 判断result = Colors.red is Colors.redprint(result)# is not判断result = Colors.red is not Colors.greenprint(result)# ==比较值是否相等result = Colors.red == Colors.red_aliasprint(result)# !=比较值是否不相等result = Colors.red != Colors.greenprint(result)
输出结果
TrueTrueTrueTrue
7. 类中枚举
枚举可以定义在类里 , 并可通过类名和枚举名进行调用 。
# ---引入枚举类---from enum import Enumclass Plane:def __init__(self, color):self.color = color# 类的成员class Colors(Enum):Red = 1Orange = 2Yellow = 3Green = 4Blue = 5plane = Plane(Plane.Colors.Blue.value)print(plane.color)
输出结果
5
好了 , 有关枚举类型的内容 , 老陈讲完了 , 如果觉得对你有所帮助 , 希望老铁能转发点赞 , 让更多的人看到这篇文章 。 你的转发和点赞 , 就是对老陈继续创作和分享最大的鼓励 。
一个当了10年技术总监的老家伙 , 分享多年的编程经验 。 想学编程的朋友 , 可关注今日头条:老陈说编程 。 我将分享Python , 前端(小程序)和App方面的编程知识 。 关注我 , 没错的 。
#Python##Python编程从入门到实践##程序员#
- 智能手机市场|华为再拿第一!27%的份额领跑全行业,苹果8%排在第四名!
- 同比|亚马逊公布“剁手节”创纪录战绩:第三方卖家全球销售额超48亿美元 同比大增60%
- 产业|前瞻生鲜电商产业全球周报第67期:发力社区团购!京东内部筹划“京东优选”
- 零部件|马瑞利发力电动产品,全球第七大零部件供应商在转型
- 互联网|苏宁跳出“零售商”重组互联网平台业务 融资60亿只是第一步
- 俄罗斯手机市场|被三星、小米击败,华为手机在俄罗斯排名跌至第三!
- 当初|这是我的第一部华为手机,当初花6799元买的,现在“一文不值”?
- 出海|出海日报丨短视频生产服务商小影科技完成近4亿元 C 轮融资;华为成为俄罗斯在线出售智能手机的第一品牌
- 敢动|女生最害怕被“偷看”的3软件,QQ不算啥,第二敢动就“翻脸”
- 报名啦!宿迁开展第五届“十大科技之星”评选