<p>Python 3.4有一个<a href="https://docs.python.org/3/library/enum.html" rel="noreferrer">new Enum data type</a>(已经<a href="https://pypi.python.org/pypi/enum34" rel="noreferrer">backported as ^{<cd1>}</a>和<a href="https://pypi.python.org/pypi/aenum" rel="noreferrer">enhanced as ^{<cd2>}</a><sup>1</sup>)。<code>enum34</code>和<code>aenum</code><sup>2</sup>都很容易支持您的用例:</p>
<p>[<code>aenum</code>py2/3]</p>
<pre><code>import aenum
class EnumWithAttrs(aenum.AutoNumberEnum):
_init_ = 'a b'
GREEN = 'a', 'b'
BLUE = 'c', 'd'
</code></pre>
<p>[<code>enum34</code>py2/3或<code>stdlib enum</code>3.4+]</p>
<pre><code>import enum
class EnumWithAttrs(enum.Enum):
def __new__(cls, *args, **kwds):
value = len(cls.__members__) + 1
obj = object.__new__(cls)
obj._value_ = value
return obj
def __init__(self, a, b):
self.a = a
self.b = b
GREEN = 'a', 'b'
BLUE = 'c', 'd'
</code></pre>
<p>使用中:</p>
<pre><code>--> EnumWithAttrs.BLUE
<EnumWithAttrs.BLUE: 1>
--> EnumWithAttrs.BLUE.a
'c'
</code></pre>
<hr/>
<p><sup>1</sup>披露:我是<a href="https://docs.python.org/3/library/enum.html" rel="noreferrer">Python stdlib ^{<cd8>}</a>、<a href="https://pypi.python.org/pypi/enum34" rel="noreferrer">^{<cd1>} backport</a>和<a href="https://pypi.python.org/pypi/aenum" rel="noreferrer">Advanced Enumeration (^{<cd2>})</a>库的作者。</p>
<p><sup>2</sup><code>aenum</code>还支持<code>NamedConstants</code>和基于元类的<code>NamedTuples</code>。</p>