擅长:python、mysql、java
<p>如果我有一个枚举<code>Foo</code>,如下所示:</p>
<pre><code>from enum import Enum
class Foo(Enum):
BAR = 1
BAZ = 2
</code></pre>
<p>然后,关于<code>enum</code>的许多奇妙之处之一是,已经有多种方法可以访问enum的成员。以下示例位于交互式控制台中:</p>
<pre><code>>>> Foo(1)
<Foo.BAR: 1>
>>> Foo['BAR']
<Foo.BAR: 1>
>>> Foo.BAR
<Foo.BAR: 1>
>>> Foo(Foo.BAR)
<Foo.BAR: 1>
</code></pre>
<p>因此,您以自己的方式重写<code>EnumMeta.__getitem__</code>可能是不明智的,因为这可能不是其他阅读您的代码的人所期望的。<code>enum</code>的内置特性是,您可以通过将成员的名称(字符串)传递到方括号中来访问成员。否则将违反代码用户的期望,并且正如MyPy错误所示,它还将违反类型检查器的期望。将<code>enum</code>显式转换为类外的<code>list</code>有些不同-类型检查器和代码的任何人类读者都清楚<code>list</code>可以使用整数或切片进行索引</p>