Python枚举的实现
文章目录
在Python3.4版本之前, 默认是没有枚举的, 我们经常使用的Python2.x的版本, 如果想实现枚举的功能该怎么办呢? 代码是人写出来的, 这难不倒我们的, 因此利用动态语言的特性, 就出现了下面的众多中的枚举实现。
枚举的实现
1. 使用类属性
|
上边的例子可以简化成:
|
2. 借助函数
|
3. 使用 collections.namedtuple
|
Python中枚举的替代方法远不止这些, 就不一一列举了。 但这些替代实现有哪些不合理的地方呢?
枚举实现的缺陷
1. 允许枚举值重复
以 collections.namedtuple
为例, 下面的例子中枚举值 Spring
与 Autumn
相等, 但却不会提示任何错误。
|
2. 支持无意义的操作
|
2.7后的替代方案—-flufl.enum模块(第三方)
它包含两种枚举类:
- 一种是Enum, 只要保证枚举值唯一即可, 对值的类型没有限制;
- 另一种是IntEnum, 其枚举值为int型
from flufl.enum import Enum |
可使用 value
来获取枚举元素的值
|
flufl.enum
不支持枚举元素的比较。
迟来的官方支持—-Enum(>=3.4)
直到Python3.4版本, 官方才加入了枚举Enum. 其实现主要参考了 flufl.enum
。
本文作者: GeekerHua
本文链接: https://blog.geekerhua.com/python_enum/
文章首发: 同步首发于 语雀 及 GeekerHua的blog
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明出处!