python - 在 Python 2 中按定义顺序迭代枚举

标签 python python-2.7 enums

我在 python 2.7 中使用来自 python 3.4 的反向移植 Enum 功能:

> python --version
Python 2.7.6
> pip install enum34
# Installs version 1.0...

根据 python 3 (https://docs.python.org/3/library/enum.html#creating-an-enum) 中的枚举文档,“枚举支持迭代,按定义顺序”。但是,迭代并没有按照我的顺序进行:

>>> from enum import Enum
>>> class Shake(Enum):
...     vanilla = 7
...     chocolate = 4
...     cookies = 9
...     mint = 3
...     
>>> for s in Shake:
...     print(s)
...     
Shake.mint
Shake.chocolate
Shake.vanilla
Shake.cookies

我是否误解了某些东西,或者 Enums 的反向移植版本还不支持按定义顺序进行迭代?假设是后者,有没有一种简单的方法可以强制它按顺序发生?

最佳答案

我在这里找到了答案:https://pypi.python.org/pypi/enum34/1.0 .

对于python <3.0,需要指定一个__order__属性:

>>> from enum import Enum
>>> class Shake(Enum):
...     __order__ = 'vanilla chocolate cookies mint'
...     vanilla = 7
...     chocolate = 4
...     cookies = 9
...     mint = 3
...     
>>> for s in Shake:
...     print(s)
...     
Shake.vanilla
Shake.chocolate
Shake.cookies
Shake.mint

关于python - 在 Python 2 中按定义顺序迭代枚举,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25982212/

相关文章:

python - Gtk 3 python 入口颜色

python - __builtin__.iterator 不存在?

c++ - C++ 中的命名枚举

java - main 方法在枚举和类中的工作方式是否不同?

python - 如何根据 Fastapi Pydantic 模型中的特定 Enum 成员进行验证

python - 如何格式化代码以每次都以相同的宽度打印?

python - 什么是 Ruby 中的 Python 文档字符串?

python - 如何使用 matplotlib 使两个标记在图例中共享相同的标签?

python - 我怎样才能解决 y = (x+1)**3 -2 for x in sympy?

Python 脚本在 PyCharm 中运行,但不在 Git Bash 中运行