zoukankan      html  css  js  c++  java
  • Python中的枚举

    在Python中想要实现枚举功能的方式比较多,可以通过字典这一数据结构,利用键与值的对应关系,可以实现枚举的功能。

    my_Enum={
    'red':1,
    'yellow':2,
    'blue':3
    }
    print(my_Enum['red'])

    也可以使用类来建立一个属性名与属性值之间的对应关系来实现枚举的功能,然后用.操作符来读取

    class my_Enum
    {
         red=1,
        yellow=2,
        blue=3       
    }
    my_Enum.red

    但是用以上两种方式出现的问题也是很明显的:

    1.枚举值可以修改

    2.用类定义的话,这些枚举功能的类可以被实例化

    3.枚举值是否重复无法检查

    在Python3.4引入了enum模块,这个模块就是为了解决上面所说到的问题的,使用的时候首先引入模块:

    import enum

    enum里面提供了Enum和IntEnum等类,可以用来继承。

    当然,这些类就被限制了,

    1.不能被继承

    2.定义之后不能在类内修改

    3.枚举名称不能重复。如果有值重复的情况,那么后者的名称将会是前者的别名,其实是一个对象。

    要控制枚举值不能重复,可以在枚举类之前加上@unique

    对枚举类的操作:

    from enum import IntEnum
    class my_Enum(IntEnum):
        red=1,
        green=2,
        blue=3,
        what=3,
        yellow=9
    #按名字取出枚举的值
    print(my_Enum['red'])
    print(my_Enum['what'])
    #枚举的值返回枚举名字
    print(my_Enum(9))
    print(my_Enum['red'].name)
    print(my_Enum['red'].value)
    #可以用for in迭代
    for i in my_Enum:
        print(i.name,'->',i.value)

     运行结果:

    my_Enum.red
    my_Enum.blue
    my_Enum.yellow
    red
    1
    red -> 1
    green -> 2
    blue -> 3
    yellow -> 9
  • 相关阅读:
    ASP.NET 静态化
    一周死磕fastreport ----ASP.NET (二)
    一周死磕fastreport ----ASP.NET (一)
    前台替换用户名部分转换为*显示
    截取部分字符信息
    win10家庭版设置移动热点出现“我们无法设置移动热点”
    云服务器配置出现的问题 2
    云服务器配置出现的问题 1
    关于使用jquery评论插件...
    $(selector).each() 和$each() 的区别
  • 原文地址:https://www.cnblogs.com/lumaoxin/p/7028640.html
Copyright © 2011-2022 走看看