<p>在PEP 435之前,Python没有对等的版本,但是您可以实现自己的版本。</p>
<p>我自己,我喜欢保持简单(我在网上看到过一些非常复杂的例子),就像这样。。。</p>
<pre><code>class Animal:
DOG = 1
CAT = 2
x = Animal.DOG
</code></pre>
<hr/>
<p>在Python 3.4(<a href="http://www.python.org/dev/peps/pep-0435/" rel="noreferrer">PEP 435</a>)中,可以将<a href="https://docs.python.org/3/library/enum.html" rel="noreferrer">Enum</a>设为基类。这将为您提供一点额外的功能,如PEP中所述。例如,枚举成员不同于整数,它们由<code>name</code>和<code>value</code>组成。</p>
<pre><code>class Animal(Enum):
DOG = 1
CAT = 2
print(Animal.DOG)
# <Animal.DOG: 1>
print(Animal.DOG.value)
# 1
print(Animal.DOG.name)
# "DOG"
</code></pre>
<hr/>
<p>如果不想键入值,请使用以下快捷方式:</p>
<pre><code>class Animal(Enum):
DOG, CAT = range(2)
</code></pre>
<hr/>
<p><code>Enum</code>实现<a href="https://docs.python.org/3/library/enum.html#how-are-enums-different" rel="noreferrer">can be converted to lists and are iterable</a>。其成员的顺序是声明顺序,与成员的值无关。例如:</p>
<pre><code>class Animal(Enum):
DOG = 1
CAT = 2
COW = 0
list(Animal)
# [<Animal.DOG: 1>, <Animal.CAT: 2>, <Animal.COW: 0>]
[animal.value for animal in Animal]
# [1, 2, 0]
Animal.CAT in Animal
# True
</code></pre>