擅长:python、mysql、java
<p>您可以利用新的<code>_missing_</code>方法:</p>
<pre><code>from aenum import Enum
class Color(Enum):
black = 0
red = 1
#
def __str__(self):
return self.name
#
@classmethod
def _missing_(cls, value):
return cls(value % 2)
</code></pre>
<p>在使用中:</p>
<pre><code>>>> list(Color)
[<Color.black: 0>, <Color.red: 1>]
>>> Color(3)
<Color.red: 1>
>>> Color(8)
<Color.black: 0>
</code></pre>
<p><code>_missing_</code>是在Python 3.6中引入的。如果需要支持早期的python,可以使用<a href="https://pypi.python.org/pypi/aenum" rel="noreferrer">^{<cd3>}</a><sup>1</sup>库</p>
<p><strong>NB</strong>调用<code>Color(7)</code>时,您不是在创建新的<code>Color</code>,而是在获取创建枚举时创建的现有<code><Color.black: 0></code></p>
<hr/>
<p><sup>1</sup>披露:我是<a href="https://docs.python.org/3/library/enum.html" rel="noreferrer">Python stdlib ^{<cd7>}</a>、<a href="https://pypi.python.org/pypi/enum34" rel="noreferrer">^{<cd8>} backport</a>和<a href="https://pypi.python.org/pypi/aenum" rel="noreferrer">Advanced Enumeration (^{<cd3>})</a>图书馆的作者</p>