博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
enum
阅读量:5842 次
发布时间:2019-06-18

本文共 3274 字,大约阅读时间需要 10 分钟。

#!/usr/bin/python3

# -*- coding: utf-8 -*-
# @Time    : 2018/6/15 14:47
# @File    : enum_demo1.py
from enum import Enum, unique
Month = Enum('Month', ('Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'))
@unique  # 如果要限制定义枚举时,不能定义相同值的成员。可以使用装饰器@unique【要导入unique模块】 Sat1 = 6 会报错
class Weekday(Enum):
    Sun = 0  # Sun的value被设定为0
    Mon = 1
    Tue = 2
    Wed = 3
    Thu = 4
    Fri = 5
    Sat = 6
    # Sat1 = 6
for name, member in Month.__members__.items():
    print(name, '=>', member, ',', member.value)
# Jan => Month.Jan , 1
# Feb => Month.Feb , 2
# Mar => Month.Mar , 3
# Apr => Month.Apr , 4
# May => Month.May , 5
# Jun => Month.Jun , 6
# Jul => Month.Jul , 7
# Aug => Month.Aug , 8
# Sep => Month.Sep , 9
# Oct => Month.Oct , 10
# Nov => Month.Nov , 11
# Dec => Month.Dec , 12
for i in Weekday.__members__.items():
    print(i, type(i))
# ('Sun', <Weekday.Sun: 0>) <class 'tuple'>
# ('Mon', <Weekday.Mon: 1>) <class 'tuple'>
# ('Tue', <Weekday.Tue: 2>) <class 'tuple'>
# ('Wed', <Weekday.Wed: 3>) <class 'tuple'>
# ('Thu', <Weekday.Thu: 4>) <class 'tuple'>
# ('Fri', <Weekday.Fri: 5>) <class 'tuple'>
# ('Sat', <Weekday.Sat: 6>) <class 'tuple'>
# 1.1 定义枚举时,成员名称不允许重复
# 1.2 默认情况下,不同的成员值允许相同。但是两个相同值的成员,第二个成员的名称被视作第一个成员的别名
# 1.3 如果枚举中存在相同值的成员,在通过值获取枚举成员时,只能获取到第一个成员
for i in Weekday:
    print(i, end=' ')
print()
# Weekday.Sun Weekday.Mon Weekday.Tue Weekday.Wed Weekday.Thu Weekday.Fri Weekday.Sat(Sat1 = 6 不显示)
# 2. 枚举取值
# 2.1 通过成员的名称来获取成员
print('Weekday[\'Sun\']---------', Weekday['Sun'])
# Weekday['Sun']--------- Weekday.Sun
# 2.2 通过成员值来获取成员
print('Weekday(2)---------', Weekday(2))
# Weekday(2)--------- Weekday.Tue
# 2.3 通过成员,来获取它的名称和值
we = Weekday.Sun
print('we.name, we.value------------', we.name, we.value)
# we.name, we.value------------ Sun 0
# 3. 迭代器
# 3.1 枚举支持迭代器,可以遍历枚举成员
for i in Weekday:
    print(i, type(i))
# Weekday.Sun <enum 'Weekday'>
# Weekday.Mon <enum 'Weekday'>
# Weekday.Tue <enum 'Weekday'>
# Weekday.Wed <enum 'Weekday'>
# Weekday.Thu <enum 'Weekday'>
# Weekday.Fri <enum 'Weekday'>
# Weekday.Sat <enum 'Weekday'>
# 3.2 如果枚举有值重复的成员,循环遍历枚举时只获取值重复成员的第一个成员
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
# 3.3 如果想把值重复的成员也遍历出来,要用枚举的一个特殊属性__members__
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', <Color.red: 1>)
# ('orange', <Color.orange: 2>)
# ('yellow', <Color.yellow: 3>)
# ('green', <Color.green: 4>)
# ('blue', <Color.blue: 5>)
# ('indigo', <Color.indigo: 6>)
# ('purple', <Color.purple: 7>)
# ('red_alias', <Color.red: 1>)
# 4 枚举比较
# 4.1 枚举成员可进行同一性比较
print(Weekday.Sun is Weekday.Sun)  # True
# 4.2 枚举成员可进等值比较
print(Weekday.Sun == Weekday.Sun)  # True
# 4.3 枚举成员不能进行大小比较
# print(Weekday.Sun > Weekday.Sun)
# TypeError: '>' not supported between instances of 'Weekday' and 'Weekday'
'''
枚举取值 总结:
通过成员的名称来获取成员;通过成员值来获取成员;通过成员,来获取它的名称和值.
注意: Enum 的成员均为单例(Singleton),并且不可实例化,不可更改.
枚举是可以比较的:
举成员可进行同一性比较,可进等值比较,不能进行大小比较.
总结:Enum可以把一组相关常量定义在一个class中,且class不可变,而且成员可以直接比较,并且枚举有多种实现方法。
'''

转载于:https://www.cnblogs.com/fmgao-technology/p/9187606.html

你可能感兴趣的文章
Redis学习-String
查看>>
存储过程中SELECT INTO的使用
查看>>
Android Paint中setTextSize
查看>>
HashMap,TreeMap,LinkedHashMap学习
查看>>
RedisRepository封装—Redis发布订阅以及StackExchange.Redis中的使用
查看>>
sql-server-storage-internals
查看>>
Linux 使用 iptables屏蔽IP段
查看>>
李洪强经典面试题32
查看>>
mysql 添加列,修改列,删除列
查看>>
苹果装WIN 7
查看>>
Mininet实验 自定义拓扑结构
查看>>
datagrid鼠标悬浮提示
查看>>
Node.js大众点评爬虫
查看>>
Html5
查看>>
微信红包惊人秘密:谁最容易抢到大红包?
查看>>
Spark 概念学习系列之从物理执行的角度透视spark Job(十七)
查看>>
连接 insance 到 vlan101 - 每天5分钟玩转 OpenStack(97)
查看>>
sqlserver两种分页方法比较
查看>>
【python】面向对象编程
查看>>
分布式系统关注点——99%的人都能看懂的「熔断」以及最佳实践
查看>>