CGO中文网你的位置:LZM 中文站 > CGO中文网 >

Python 中enum的使用方法总结

发布日期:2025-01-03 17:55    点击次数:68

前言: 枚举(enumeration)在许多编程语言中常被表示为一种基础的数据结构使用,枚举帮助组织一系列密切相关的成员到同一个群组机制下,一般各种离散的属性都可以用枚举的数据结构定义,比如颜色、季节、国家、时间单位等在Python中没有内置的枚举方法,起初模仿实现枚举属性的方式是 使用成员: Direction.EAST Direction.SOUTH  检查成员: 成员NORTH的类型是int,而不是Direction,这个做法只是简单地将属性定义到类中 Python标准库enum实现了枚举属性的功能,接下来介绍enum的在实际工作生产中的用法 1.为什么要用enum,什么时候使用enum? enum规定了一个有限集合的属性,限定只能使用集合内的值,明确地声明了哪些值是合法值,,如果输入不合法的值会引发错误,只要是想要从一个限定集合取值使用的方式就可以使用enum来组织值。 2.enum的定义/声明 使用和类型检查: 检查示例South的的类型,结果如期望的是Directions。name和value是两个有用的附加属性。 实际工作中可能会这样使用: 输入未定义的值时: 3.遍历成员 4.继承Enum的类中定义方法 可以用于将定义的值转换为获取需要的值 5.将Enum类属性的值定义为函数或方法 输出: 0.090.0SOUTH angle: 180.0SOUTH angle plus 90:  270.0 key: 1.将函数方法用partial包起来;2.定义__call__方法。 忽略大小写: 继承父类Enum的_missing_方法,在值的比较时将case改为一致即可 输出: TimeUnit.MONTHTimeUnit.MONTH 6.自定义异常处理 第一种,执行SomeEnum(“abc”)时想要引发自定义错误,其中"abc"是未定义的属性值 输出: TimeUnit.MONTH ValueError: 'abc' is not a valid TimeUnit...Exception: Customized exception 第二种:执行SomeEnum.__getattr__(“ABC”)时,想要引发自定义错误,其中"ABC"是未定义的属性名称,需要重写一下EnumMeta中的__getattr__方法,然后指定实例Enum对象的的metaclass 输出: SomeEnum1.A1 123 ...Exception: Customized exception 7.enum的进阶用法 Functional APIs 动态创建和修改Enum对象,可以在不修改原定义好的Enum类的情况下,追加修改,这里借用一个说明示例,具体的场景使用案例可以看下面的场景举例 注:这里没有使用类直接声明的方式来执行枚举(定义时如果不指定值默认是从1开始的数字,也就相当于NORTH = auto(),auto是enum中的方法),仍然可以在后面为这个动态创建的DirectionFunctional创建方法,这种在运行的过程中修改对象的方法也就是python的monkey patching。 Functional APIs的用处和使用场景举例: 在不修改某定义好的Enum类的代码块的情况下,下面示例中是Arithmethic类,可以认为是某源码库我们不想修改它,然后增加这个Enum类的属性,有两种方法:1.enum.Enum对象的属性不可以直接被修改,但我们可以动态创建一个新的Enum类,以拓展原来的Enum对象例如要为下面的Enum对象Arithmetic增加一个取模成员MOD="%",但是又不能修改Arithmetic类中的代码块: 就可以使用enum的Functional APIs方法: 输出: Arithmetic.MOD 2 注意:动态创建Enum对象时,要指定原Enum类所在的module名称: "Yourmodule",否则执行时可能会因为找不到源无法解析,qualname要指定类的位置:"Yourmodule.YourEnum",值用字符串类型 2.使用aenum.extend_enum可以动态修改enum.Enum对象 为enum.Enum类Arithmetic增加一个指数成员EXP="**",且不修改原来的Arithmetic类的代码块: 输出: <enum 'Arithmetic'> [<Arithmetic.ADD: '+'>, <Arithmetic.SUB: '-'>, <Arithmetic.MUL: '*'>, <Arithmetic.DIV: '/'>, <Arithmetic.EXP: '**'>]8 到此这篇关于Python 中enum的使用方法总结的文章就介绍到这了,更多相关Python enum使用内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家! 您可能感兴趣的文章:python 使用enumerate()函数详解详解Python中enumerate函数的使用Python中的enum的使用方法Python中的枚举函数enumerate()的具体用法Python enumerate() 函数如何实现索引功能Python Enum枚举类的定义及使用场景最佳实践