Python 2中是否有更简便的Enum成员排序方法?
Python 2.7 Enum 无序问题的解决方案(适配OpenERP集成场景)
我最近刚好处理过类似的场景——在Python 2.7环境下用Enum做OpenERP和遗留框架的集成,确实踩过Enum默认无序的坑。
问题复现
默认情况下,Python 2.7中的Enum成员遍历顺序和定义顺序完全不一致:
from enum import Enum class Color(Enum): RED = 1 GREEN = 2 BLUE = 3 print(list(Color)) # 输出: [<Color.BLUE: 3>, <Color.RED: 1>, <Color.GREEN: 2>]
这种乱序的情况对需要严格遵循定义顺序的集成场景来说,很容易导致数据映射、接口交互出现异常。
解决办法
如果排序至关重要,只需在Enum类中手动添加_order_属性,按定义顺序列出成员名称(用逗号分隔)即可:
from enum import Enum class Color(Enum): RED = 1 GREEN = 2 BLUE = 3 _order_ = 'RED, GREEN, BLUE' # 强制指定遍历顺序 print(list(Color)) # 输出: [<Color.RED: 1>, <Color.GREEN: 2>, <Color.BLUE: 3>]
这个_order_属性是Python 2.7版本Enum的专属特性,专门用来修正默认的无序问题,完全适配你需要严格顺序的框架集成需求。
内容的提问来源于stack exchange,提问作者Ethan Furman
相关产品推荐
相关产品推荐

