美文网首页
(10) python中的枚举

(10) python中的枚举

作者: Wei_Lai | 来源:发表于2018-10-29 22:50 被阅读0次

在python中,枚举的本质是一个类,所有枚举类都是Enum的子类
枚举值不能动态更改且标签唯一,标签唯一但是数值不唯一。如果数值不唯一,相当于起别名

表示类型的三种方式

from enum import Enum

class VIP(Enum):       #所有枚举类都是Enum的子类
    YELLOW = 1     #常量是不能更改的   用大写表示(约定的,python中没有真的常量)
    GREEN = 2   
    RED =  'str'
    BLACK = 4
    PINK = 1     # 其实就是YELLOW = 1, 可以看作YELLOW 的别名,
    #YELLOW = 1  #会报错,不能同时有两个YELLOW Attempted to reuse key: 'YELLOW'
  #  GREEN = 6  #会报错,不能继续使用GREEN这个标签 Attempted to reuse key: 'GREEN'

#class Common():
  #  YELLOW = 1       
#VIP.YELLOW =6         #会报错,枚举中的值不能被更改
print(VIP.PINK)
print(VIP.YELLOW)    #VIP.YELLOW   (不关心取值)
print(VIP.PINK)      #VIP.YELLOW   可以看作YELLOW 的别名
print(type(VIP.YELLOW))   #<enum 'VIP'>  枚举类型
print(VIP.YELLOW.name)   #YELLOW 获取标签名字
print(type(VIP.YELLOW.name))  #<class 'str'> 字符串类型

print(VIP['YELLOW'])  #VIP.YELLOW

print(VIP.YELLOW.value)  #1   获取值

#枚举类型、枚举的名字、枚举的值

for v in VIP:   #遍历枚举类型(并不会把别名打印出来)
    print(v)    #VIP.YELLOW
                #VIP.GREEN
                #VIP.RED
                #VIP.BLACK 

#枚举的比较运算
#枚举不可以进行大小比较,但可以进行等值比较,身份比较
result = VIP.YELLOW == VIP.PINK  #枚举之间的等值比较  #True
result1 = VIP.YELLOW == 1    #False
#result = VIP.YELLOW >= VIP.PINK  #枚举不能进行大小比较报错 
                                 #'>=' not supported between instances of 'VIP' and 'VIP'
result2 = VIP.YELLOW is VIP.PINK #True   身份比较
print(result)  
print(result1)
print(result2)  


class VIP1(Enum):       
    YELLOW = 1     
    GREEN = 2   
    RED = '3'
    BLACK = 4
    PINK = 1

result = VIP.YELLOW == VIP1.YELLOW  #Fales  虽然值相等,但其实是两个不同的枚举类型
print(result) 

for v in VIP.__members__.items():   #遍历枚举类型(把别名也打印出来)
    print(v)
'''
('YELLOW', <VIP.YELLOW: 1>)
('GREEN', <VIP.GREEN: 2>)
('RED', <VIP.RED: 3>)
('BLACK', <VIP.BLACK: 4>)
('PINK', <VIP.YELLOW: 1>)
'''

for v in VIP.__members__:
    print(v)   #枚举的名字(包括别名)
'''
YELLOW
GREEN
RED
BLACK
PINK
'''

a = 1
a = VIP(a)         #把a变成一个枚举类型
print(a)   #VIP.YELLOW     


from enum import IntEnum #(枚举的值得是int类型)
from enum import IntEnum,unique #(枚举的值得是int类型,且不能重复)

class VIP2(IntEnum):       
    YELLOW = 1     
    GREEN = 2   
#    RED = 'str'  #会报错,(枚举的值得是int类型)
    BLACK = 4
    PINK = 1    

@unique
class VIP3(IntEnum):       
    YELLOW = 1     
    GREEN = 2   
#    RED = 'str'  #会报错,(枚举的值得是int类型)
    BLACK = 4
  #  PINK = 1       #会报错,取值重复



#枚举  是单例模式    #23种设计模式        实践中

相关文章

  • (10) python中的枚举

    在python中,枚举的本质是一个类,所有枚举类都是Enum的子类枚举值不能动态更改且标签唯一,标签唯一但是数值不...

  • Python_枚举

    一、枚举 Enum类 Python中所有枚举类型都是enum模块下的Enum类的子类。 枚举中的标识最好全部使用大...

  • Python中枚举的用法

    Python周技# Python中枚举的用法: 枚举类标签值不可被修改一个标签只能对应一个值,但多个标签可以对应相...

  • Python学习笔记九(枚举)

    枚举 python 3中新增相比字典以及类变量,枚举用来抽象类型具有优势有1、值不可变;2、防止相同值 获取枚举类...

  • python学习笔记-tip43(枚举)

    前言 意思同java中的枚举,但是用法需要熟悉一下 怎么定义python中的枚举? 不知道怎么说,为了缓解尴尬,直...

  • 枚举、元类和错误调试

    枚举 在各种编程语言中常用的枚举类型在python中当然不例外的也是有的,创建一个枚举非常简单,如下: 创建了一个...

  • Python中枚举类的用法

    使用枚举类有哪些好处 枚举类可以方便地表示星期,月份等常数类型,如果你不用枚举类,那么你只能用数字或者字符串。如果...

  • Python中枚举(enumerate)的使用

    Python提供了内置的enumerate函数,可以把各种迭代器包装成生成器,以便稍后产生输出值,这个生成器每次产...

  • Python枚举

    https://www.cnblogs.com/ucos/p/5896861.html

  • Python枚举

    1. 枚举类型、枚举名称与枚举值 枚举优点: 不可更改性, 不可重复性 2. 枚举比较 枚举只能进行等于比较不能进...

网友评论

      本文标题:(10) python中的枚举

      本文链接:https://www.haomeiwen.com/subject/otzitqtx.html