gooderp18绿色标准版
Você não pode selecionar mais de 25 tópicos Os tópicos devem começar com uma letra ou um número, podem incluir traços ('-') e podem ter até 35 caracteres.

1502 linhas
130KB

  1. <!DOCTYPE html>
  2. <html lang="en" data-content_root="../">
  3. <head>
  4. <meta charset="utf-8" />
  5. <meta name="viewport" content="width=device-width, initial-scale=1.0" /><meta name="viewport" content="width=device-width, initial-scale=1" />
  6. <meta property="og:title" content="enum — Support for enumerations" />
  7. <meta property="og:type" content="website" />
  8. <meta property="og:url" content="https://docs.python.org/3/library/enum.html" />
  9. <meta property="og:site_name" content="Python documentation" />
  10. <meta property="og:description" content="Source code: Lib/enum.py Important: This page contains the API reference information. For tutorial information and discussion of more advanced topics, see Basic Tutorial, Advanced Tutorial, Enum Co..." />
  11. <meta property="og:image" content="https://docs.python.org/3/_static/og-image.png" />
  12. <meta property="og:image:alt" content="Python documentation" />
  13. <meta name="description" content="Source code: Lib/enum.py Important: This page contains the API reference information. For tutorial information and discussion of more advanced topics, see Basic Tutorial, Advanced Tutorial, Enum Co..." />
  14. <meta property="og:image:width" content="200" />
  15. <meta property="og:image:height" content="200" />
  16. <meta name="theme-color" content="#3776ab" />
  17. <title>enum — Support for enumerations &#8212; Python 3.12.3 documentation</title><meta name="viewport" content="width=device-width, initial-scale=1.0">
  18. <link rel="stylesheet" type="text/css" href="../_static/pygments.css?v=80d5e7a1" />
  19. <link rel="stylesheet" type="text/css" href="../_static/pydoctheme.css?v=bb723527" />
  20. <link id="pygments_dark_css" media="(prefers-color-scheme: dark)" rel="stylesheet" type="text/css" href="../_static/pygments_dark.css?v=b20cc3f5" />
  21. <script src="../_static/documentation_options.js?v=2c828074"></script>
  22. <script src="../_static/doctools.js?v=888ff710"></script>
  23. <script src="../_static/sphinx_highlight.js?v=dc90522c"></script>
  24. <script src="../_static/sidebar.js"></script>
  25. <link rel="search" type="application/opensearchdescription+xml"
  26. title="Search within Python 3.12.3 documentation"
  27. href="../_static/opensearch.xml"/>
  28. <link rel="author" title="About these documents" href="../about.html" />
  29. <link rel="index" title="Index" href="../genindex.html" />
  30. <link rel="search" title="Search" href="../search.html" />
  31. <link rel="copyright" title="Copyright" href="../copyright.html" />
  32. <link rel="next" title="graphlib — Functionality to operate with graph-like structures" href="graphlib.html" />
  33. <link rel="prev" title="reprlib — Alternate repr() implementation" href="reprlib.html" />
  34. <link rel="canonical" href="https://docs.python.org/3/library/enum.html" />
  35. <style>
  36. @media only screen {
  37. table.full-width-table {
  38. width: 100%;
  39. }
  40. }
  41. </style>
  42. <link rel="stylesheet" href="../_static/pydoctheme_dark.css" media="(prefers-color-scheme: dark)" id="pydoctheme_dark_css">
  43. <link rel="shortcut icon" type="image/png" href="../_static/py.svg" />
  44. <script type="text/javascript" src="../_static/copybutton.js"></script>
  45. <script type="text/javascript" src="../_static/menu.js"></script>
  46. <script type="text/javascript" src="../_static/search-focus.js"></script>
  47. <script type="text/javascript" src="../_static/themetoggle.js"></script>
  48. </head>
  49. <body>
  50. <div class="mobile-nav">
  51. <input type="checkbox" id="menuToggler" class="toggler__input" aria-controls="navigation"
  52. aria-pressed="false" aria-expanded="false" role="button" aria-label="Menu" />
  53. <nav class="nav-content" role="navigation">
  54. <label for="menuToggler" class="toggler__label">
  55. <span></span>
  56. </label>
  57. <span class="nav-items-wrapper">
  58. <a href="https://www.python.org/" class="nav-logo">
  59. <img src="../_static/py.svg" alt="Python logo"/>
  60. </a>
  61. <span class="version_switcher_placeholder"></span>
  62. <form role="search" class="search" action="../search.html" method="get">
  63. <svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" class="search-icon">
  64. <path fill-rule="nonzero" fill="currentColor" d="M15.5 14h-.79l-.28-.27a6.5 6.5 0 001.48-5.34c-.47-2.78-2.79-5-5.59-5.34a6.505 6.505 0 00-7.27 7.27c.34 2.8 2.56 5.12 5.34 5.59a6.5 6.5 0 005.34-1.48l.27.28v.79l4.25 4.25c.41.41 1.08.41 1.49 0 .41-.41.41-1.08 0-1.49L15.5 14zm-6 0C7.01 14 5 11.99 5 9.5S7.01 5 9.5 5 14 7.01 14 9.5 11.99 14 9.5 14z"></path>
  65. </svg>
  66. <input placeholder="Quick search" aria-label="Quick search" type="search" name="q" />
  67. <input type="submit" value="Go"/>
  68. </form>
  69. </span>
  70. </nav>
  71. <div class="menu-wrapper">
  72. <nav class="menu" role="navigation" aria-label="main navigation">
  73. <div class="language_switcher_placeholder"></div>
  74. <label class="theme-selector-label">
  75. Theme
  76. <select class="theme-selector" oninput="activateTheme(this.value)">
  77. <option value="auto" selected>Auto</option>
  78. <option value="light">Light</option>
  79. <option value="dark">Dark</option>
  80. </select>
  81. </label>
  82. <div>
  83. <h3><a href="../contents.html">Table of Contents</a></h3>
  84. <ul>
  85. <li><a class="reference internal" href="#"><code class="xref py py-mod docutils literal notranslate"><span class="pre">enum</span></code> — Support for enumerations</a><ul>
  86. <li><a class="reference internal" href="#module-contents">Module Contents</a></li>
  87. <li><a class="reference internal" href="#data-types">Data Types</a><ul>
  88. <li><a class="reference internal" href="#supported-dunder-names">Supported <code class="docutils literal notranslate"><span class="pre">__dunder__</span></code> names</a></li>
  89. <li><a class="reference internal" href="#supported-sunder-names">Supported <code class="docutils literal notranslate"><span class="pre">_sunder_</span></code> names</a></li>
  90. </ul>
  91. </li>
  92. <li><a class="reference internal" href="#utilities-and-decorators">Utilities and Decorators</a></li>
  93. <li><a class="reference internal" href="#notes">Notes</a></li>
  94. </ul>
  95. </li>
  96. </ul>
  97. </div>
  98. <div>
  99. <h4>Previous topic</h4>
  100. <p class="topless"><a href="reprlib.html"
  101. title="previous chapter"><code class="xref py py-mod docutils literal notranslate"><span class="pre">reprlib</span></code> — Alternate <code class="xref py py-func docutils literal notranslate"><span class="pre">repr()</span></code> implementation</a></p>
  102. </div>
  103. <div>
  104. <h4>Next topic</h4>
  105. <p class="topless"><a href="graphlib.html"
  106. title="next chapter"><code class="xref py py-mod docutils literal notranslate"><span class="pre">graphlib</span></code> — Functionality to operate with graph-like structures</a></p>
  107. </div>
  108. <div role="note" aria-label="source link">
  109. <h3>This Page</h3>
  110. <ul class="this-page-menu">
  111. <li><a href="../bugs.html">Report a Bug</a></li>
  112. <li>
  113. <a href="https://github.com/python/cpython/blob/main/Doc/library/enum.rst"
  114. rel="nofollow">Show Source
  115. </a>
  116. </li>
  117. </ul>
  118. </div>
  119. </nav>
  120. </div>
  121. </div>
  122. <div class="related" role="navigation" aria-label="related navigation">
  123. <h3>Navigation</h3>
  124. <ul>
  125. <li class="right" style="margin-right: 10px">
  126. <a href="../genindex.html" title="General Index"
  127. accesskey="I">index</a></li>
  128. <li class="right" >
  129. <a href="../py-modindex.html" title="Python Module Index"
  130. >modules</a> |</li>
  131. <li class="right" >
  132. <a href="graphlib.html" title="graphlib — Functionality to operate with graph-like structures"
  133. accesskey="N">next</a> |</li>
  134. <li class="right" >
  135. <a href="reprlib.html" title="reprlib — Alternate repr() implementation"
  136. accesskey="P">previous</a> |</li>
  137. <li><img src="../_static/py.svg" alt="Python logo" style="vertical-align: middle; margin-top: -1px"/></li>
  138. <li><a href="https://www.python.org/">Python</a> &#187;</li>
  139. <li class="switchers">
  140. <div class="language_switcher_placeholder"></div>
  141. <div class="version_switcher_placeholder"></div>
  142. </li>
  143. <li>
  144. </li>
  145. <li id="cpython-language-and-version">
  146. <a href="../index.html">3.12.3 Documentation</a> &#187;
  147. </li>
  148. <li class="nav-item nav-item-1"><a href="index.html" >The Python Standard Library</a> &#187;</li>
  149. <li class="nav-item nav-item-2"><a href="datatypes.html" accesskey="U">Data Types</a> &#187;</li>
  150. <li class="nav-item nav-item-this"><a href=""><code class="xref py py-mod docutils literal notranslate"><span class="pre">enum</span></code> — Support for enumerations</a></li>
  151. <li class="right">
  152. <div class="inline-search" role="search">
  153. <form class="inline-search" action="../search.html" method="get">
  154. <input placeholder="Quick search" aria-label="Quick search" type="search" name="q" id="search-box" />
  155. <input type="submit" value="Go" />
  156. </form>
  157. </div>
  158. |
  159. </li>
  160. <li class="right">
  161. <label class="theme-selector-label">
  162. Theme
  163. <select class="theme-selector" oninput="activateTheme(this.value)">
  164. <option value="auto" selected>Auto</option>
  165. <option value="light">Light</option>
  166. <option value="dark">Dark</option>
  167. </select>
  168. </label> |</li>
  169. </ul>
  170. </div>
  171. <div class="document">
  172. <div class="documentwrapper">
  173. <div class="bodywrapper">
  174. <div class="body" role="main">
  175. <section id="module-enum">
  176. <span id="enum-support-for-enumerations"></span><h1><a class="reference internal" href="#module-enum" title="enum: Implementation of an enumeration class."><code class="xref py py-mod docutils literal notranslate"><span class="pre">enum</span></code></a> — Support for enumerations<a class="headerlink" href="#module-enum" title="Link to this heading">¶</a></h1>
  177. <div class="versionadded">
  178. <p><span class="versionmodified added">New in version 3.4.</span></p>
  179. </div>
  180. <p><strong>Source code:</strong> <a class="reference external" href="https://github.com/python/cpython/tree/3.12/Lib/enum.py">Lib/enum.py</a></p>
  181. <aside class="sidebar">
  182. <p class="sidebar-title">Important</p>
  183. <p>This page contains the API reference information. For tutorial
  184. information and discussion of more advanced topics, see</p>
  185. <ul class="simple">
  186. <li><p><a class="reference internal" href="../howto/enum.html#enum-basic-tutorial"><span class="std std-ref">Basic Tutorial</span></a></p></li>
  187. <li><p><a class="reference internal" href="../howto/enum.html#enum-advanced-tutorial"><span class="std std-ref">Advanced Tutorial</span></a></p></li>
  188. <li><p><a class="reference internal" href="../howto/enum.html#enum-cookbook"><span class="std std-ref">Enum Cookbook</span></a></p></li>
  189. </ul>
  190. </aside>
  191. <hr class="docutils" />
  192. <p>An enumeration:</p>
  193. <ul class="simple">
  194. <li><p>is a set of symbolic names (members) bound to unique values</p></li>
  195. <li><p>can be iterated over to return its canonical (i.e. non-alias) members in
  196. definition order</p></li>
  197. <li><p>uses <em>call</em> syntax to return members by value</p></li>
  198. <li><p>uses <em>index</em> syntax to return members by name</p></li>
  199. </ul>
  200. <p>Enumerations are created either by using <a class="reference internal" href="../reference/compound_stmts.html#class"><code class="xref std std-keyword docutils literal notranslate"><span class="pre">class</span></code></a> syntax, or by
  201. using function-call syntax:</p>
  202. <div class="highlight-python3 notranslate"><div class="highlight"><pre><span></span><span class="gp">&gt;&gt;&gt; </span><span class="kn">from</span> <span class="nn">enum</span> <span class="kn">import</span> <span class="n">Enum</span>
  203. <span class="gp">&gt;&gt;&gt; </span><span class="c1"># class syntax</span>
  204. <span class="gp">&gt;&gt;&gt; </span><span class="k">class</span> <span class="nc">Color</span><span class="p">(</span><span class="n">Enum</span><span class="p">):</span>
  205. <span class="gp">... </span> <span class="n">RED</span> <span class="o">=</span> <span class="mi">1</span>
  206. <span class="gp">... </span> <span class="n">GREEN</span> <span class="o">=</span> <span class="mi">2</span>
  207. <span class="gp">... </span> <span class="n">BLUE</span> <span class="o">=</span> <span class="mi">3</span>
  208. <span class="gp">&gt;&gt;&gt; </span><span class="c1"># functional syntax</span>
  209. <span class="gp">&gt;&gt;&gt; </span><span class="n">Color</span> <span class="o">=</span> <span class="n">Enum</span><span class="p">(</span><span class="s1">&#39;Color&#39;</span><span class="p">,</span> <span class="p">[</span><span class="s1">&#39;RED&#39;</span><span class="p">,</span> <span class="s1">&#39;GREEN&#39;</span><span class="p">,</span> <span class="s1">&#39;BLUE&#39;</span><span class="p">])</span>
  210. </pre></div>
  211. </div>
  212. <p>Even though we can use <a class="reference internal" href="../reference/compound_stmts.html#class"><code class="xref std std-keyword docutils literal notranslate"><span class="pre">class</span></code></a> syntax to create Enums, Enums
  213. are not normal Python classes. See
  214. <a class="reference internal" href="../howto/enum.html#enum-class-differences"><span class="std std-ref">How are Enums different?</span></a> for more details.</p>
  215. <div class="admonition note">
  216. <p class="admonition-title">Note</p>
  217. <p>Nomenclature</p>
  218. <ul class="simple">
  219. <li><p>The class <code class="xref py py-class docutils literal notranslate"><span class="pre">Color</span></code> is an <em>enumeration</em> (or <em>enum</em>)</p></li>
  220. <li><p>The attributes <code class="xref py py-attr docutils literal notranslate"><span class="pre">Color.RED</span></code>, <code class="xref py py-attr docutils literal notranslate"><span class="pre">Color.GREEN</span></code>, etc., are
  221. <em>enumeration members</em> (or <em>members</em>) and are functionally constants.</p></li>
  222. <li><p>The enum members have <em>names</em> and <em>values</em> (the name of
  223. <code class="xref py py-attr docutils literal notranslate"><span class="pre">Color.RED</span></code> is <code class="docutils literal notranslate"><span class="pre">RED</span></code>, the value of <code class="xref py py-attr docutils literal notranslate"><span class="pre">Color.BLUE</span></code> is
  224. <code class="docutils literal notranslate"><span class="pre">3</span></code>, etc.)</p></li>
  225. </ul>
  226. </div>
  227. <hr class="docutils" />
  228. <section id="module-contents">
  229. <h2>Module Contents<a class="headerlink" href="#module-contents" title="Link to this heading">¶</a></h2>
  230. <blockquote>
  231. <div><p><a class="reference internal" href="#enum.EnumType" title="enum.EnumType"><code class="xref py py-class docutils literal notranslate"><span class="pre">EnumType</span></code></a></p>
  232. <blockquote>
  233. <div><p>The <code class="docutils literal notranslate"><span class="pre">type</span></code> for Enum and its subclasses.</p>
  234. </div></blockquote>
  235. <p><a class="reference internal" href="#enum.Enum" title="enum.Enum"><code class="xref py py-class docutils literal notranslate"><span class="pre">Enum</span></code></a></p>
  236. <blockquote>
  237. <div><p>Base class for creating enumerated constants.</p>
  238. </div></blockquote>
  239. <p><a class="reference internal" href="#enum.IntEnum" title="enum.IntEnum"><code class="xref py py-class docutils literal notranslate"><span class="pre">IntEnum</span></code></a></p>
  240. <blockquote>
  241. <div><p>Base class for creating enumerated constants that are also
  242. subclasses of <a class="reference internal" href="functions.html#int" title="int"><code class="xref py py-class docutils literal notranslate"><span class="pre">int</span></code></a>. (<a class="reference internal" href="#notes">Notes</a>)</p>
  243. </div></blockquote>
  244. <p><a class="reference internal" href="#enum.StrEnum" title="enum.StrEnum"><code class="xref py py-class docutils literal notranslate"><span class="pre">StrEnum</span></code></a></p>
  245. <blockquote>
  246. <div><p>Base class for creating enumerated constants that are also
  247. subclasses of <a class="reference internal" href="stdtypes.html#str" title="str"><code class="xref py py-class docutils literal notranslate"><span class="pre">str</span></code></a>. (<a class="reference internal" href="#notes">Notes</a>)</p>
  248. </div></blockquote>
  249. <p><a class="reference internal" href="#enum.Flag" title="enum.Flag"><code class="xref py py-class docutils literal notranslate"><span class="pre">Flag</span></code></a></p>
  250. <blockquote>
  251. <div><p>Base class for creating enumerated constants that can be combined using
  252. the bitwise operations without losing their <a class="reference internal" href="#enum.Flag" title="enum.Flag"><code class="xref py py-class docutils literal notranslate"><span class="pre">Flag</span></code></a> membership.</p>
  253. </div></blockquote>
  254. <p><a class="reference internal" href="#enum.IntFlag" title="enum.IntFlag"><code class="xref py py-class docutils literal notranslate"><span class="pre">IntFlag</span></code></a></p>
  255. <blockquote>
  256. <div><p>Base class for creating enumerated constants that can be combined using
  257. the bitwise operators without losing their <a class="reference internal" href="#enum.IntFlag" title="enum.IntFlag"><code class="xref py py-class docutils literal notranslate"><span class="pre">IntFlag</span></code></a> membership.
  258. <a class="reference internal" href="#enum.IntFlag" title="enum.IntFlag"><code class="xref py py-class docutils literal notranslate"><span class="pre">IntFlag</span></code></a> members are also subclasses of <a class="reference internal" href="functions.html#int" title="int"><code class="xref py py-class docutils literal notranslate"><span class="pre">int</span></code></a>. (<a class="reference internal" href="#notes">Notes</a>)</p>
  259. </div></blockquote>
  260. <p><a class="reference internal" href="#enum.ReprEnum" title="enum.ReprEnum"><code class="xref py py-class docutils literal notranslate"><span class="pre">ReprEnum</span></code></a></p>
  261. <blockquote>
  262. <div><p>Used by <a class="reference internal" href="#enum.IntEnum" title="enum.IntEnum"><code class="xref py py-class docutils literal notranslate"><span class="pre">IntEnum</span></code></a>, <a class="reference internal" href="#enum.StrEnum" title="enum.StrEnum"><code class="xref py py-class docutils literal notranslate"><span class="pre">StrEnum</span></code></a>, and <a class="reference internal" href="#enum.IntFlag" title="enum.IntFlag"><code class="xref py py-class docutils literal notranslate"><span class="pre">IntFlag</span></code></a>
  263. to keep the <a class="reference internal" href="stdtypes.html#str" title="str"><code class="xref py py-class docutils literal notranslate"><span class="pre">str()</span></code></a> of the mixed-in type.</p>
  264. </div></blockquote>
  265. <p><a class="reference internal" href="#enum.EnumCheck" title="enum.EnumCheck"><code class="xref py py-class docutils literal notranslate"><span class="pre">EnumCheck</span></code></a></p>
  266. <blockquote>
  267. <div><p>An enumeration with the values <code class="docutils literal notranslate"><span class="pre">CONTINUOUS</span></code>, <code class="docutils literal notranslate"><span class="pre">NAMED_FLAGS</span></code>, and
  268. <code class="docutils literal notranslate"><span class="pre">UNIQUE</span></code>, for use with <a class="reference internal" href="#enum.verify" title="enum.verify"><code class="xref py py-func docutils literal notranslate"><span class="pre">verify()</span></code></a> to ensure various constraints
  269. are met by a given enumeration.</p>
  270. </div></blockquote>
  271. <p><a class="reference internal" href="#enum.FlagBoundary" title="enum.FlagBoundary"><code class="xref py py-class docutils literal notranslate"><span class="pre">FlagBoundary</span></code></a></p>
  272. <blockquote>
  273. <div><p>An enumeration with the values <code class="docutils literal notranslate"><span class="pre">STRICT</span></code>, <code class="docutils literal notranslate"><span class="pre">CONFORM</span></code>, <code class="docutils literal notranslate"><span class="pre">EJECT</span></code>, and
  274. <code class="docutils literal notranslate"><span class="pre">KEEP</span></code> which allows for more fine-grained control over how invalid values
  275. are dealt with in an enumeration.</p>
  276. </div></blockquote>
  277. <p><a class="reference internal" href="#enum.auto" title="enum.auto"><code class="xref py py-class docutils literal notranslate"><span class="pre">auto</span></code></a></p>
  278. <blockquote>
  279. <div><p>Instances are replaced with an appropriate value for Enum members.
  280. <a class="reference internal" href="#enum.StrEnum" title="enum.StrEnum"><code class="xref py py-class docutils literal notranslate"><span class="pre">StrEnum</span></code></a> defaults to the lower-cased version of the member name,
  281. while other Enums default to 1 and increase from there.</p>
  282. </div></blockquote>
  283. <p><a class="reference internal" href="#enum.property" title="enum.property"><code class="xref py py-func docutils literal notranslate"><span class="pre">property()</span></code></a></p>
  284. <blockquote>
  285. <div><p>Allows <a class="reference internal" href="#enum.Enum" title="enum.Enum"><code class="xref py py-class docutils literal notranslate"><span class="pre">Enum</span></code></a> members to have attributes without conflicting with
  286. member names. The <code class="docutils literal notranslate"><span class="pre">value</span></code> and <code class="docutils literal notranslate"><span class="pre">name</span></code> attributes are implemented this
  287. way.</p>
  288. </div></blockquote>
  289. <p><a class="reference internal" href="#enum.unique" title="enum.unique"><code class="xref py py-func docutils literal notranslate"><span class="pre">unique()</span></code></a></p>
  290. <blockquote>
  291. <div><p>Enum class decorator that ensures only one name is bound to any one value.</p>
  292. </div></blockquote>
  293. <p><a class="reference internal" href="#enum.verify" title="enum.verify"><code class="xref py py-func docutils literal notranslate"><span class="pre">verify()</span></code></a></p>
  294. <blockquote>
  295. <div><p>Enum class decorator that checks user-selectable constraints on an
  296. enumeration.</p>
  297. </div></blockquote>
  298. <p><a class="reference internal" href="#enum.member" title="enum.member"><code class="xref py py-func docutils literal notranslate"><span class="pre">member()</span></code></a></p>
  299. <blockquote>
  300. <div><p>Make <code class="docutils literal notranslate"><span class="pre">obj</span></code> a member. Can be used as a decorator.</p>
  301. </div></blockquote>
  302. <p><a class="reference internal" href="#enum.nonmember" title="enum.nonmember"><code class="xref py py-func docutils literal notranslate"><span class="pre">nonmember()</span></code></a></p>
  303. <blockquote>
  304. <div><p>Do not make <code class="docutils literal notranslate"><span class="pre">obj</span></code> a member. Can be used as a decorator.</p>
  305. </div></blockquote>
  306. <p><a class="reference internal" href="#enum.global_enum" title="enum.global_enum"><code class="xref py py-func docutils literal notranslate"><span class="pre">global_enum()</span></code></a></p>
  307. <blockquote>
  308. <div><p>Modify the <a class="reference internal" href="stdtypes.html#str" title="str"><code class="xref py py-class docutils literal notranslate"><span class="pre">str()</span></code></a> and <a class="reference internal" href="functions.html#repr" title="repr"><code class="xref py py-func docutils literal notranslate"><span class="pre">repr()</span></code></a> of an enum
  309. to show its members as belonging to the module instead of its class,
  310. and export the enum members to the global namespace.</p>
  311. </div></blockquote>
  312. <p><a class="reference internal" href="#enum.show_flag_values" title="enum.show_flag_values"><code class="xref py py-func docutils literal notranslate"><span class="pre">show_flag_values()</span></code></a></p>
  313. <blockquote>
  314. <div><p>Return a list of all power-of-two integers contained in a flag.</p>
  315. </div></blockquote>
  316. </div></blockquote>
  317. <div class="versionadded">
  318. <p><span class="versionmodified added">New in version 3.6: </span><code class="docutils literal notranslate"><span class="pre">Flag</span></code>, <code class="docutils literal notranslate"><span class="pre">IntFlag</span></code>, <code class="docutils literal notranslate"><span class="pre">auto</span></code></p>
  319. </div>
  320. <div class="versionadded">
  321. <p><span class="versionmodified added">New in version 3.11: </span><code class="docutils literal notranslate"><span class="pre">StrEnum</span></code>, <code class="docutils literal notranslate"><span class="pre">EnumCheck</span></code>, <code class="docutils literal notranslate"><span class="pre">ReprEnum</span></code>, <code class="docutils literal notranslate"><span class="pre">FlagBoundary</span></code>, <code class="docutils literal notranslate"><span class="pre">property</span></code>, <code class="docutils literal notranslate"><span class="pre">member</span></code>, <code class="docutils literal notranslate"><span class="pre">nonmember</span></code>, <code class="docutils literal notranslate"><span class="pre">global_enum</span></code>, <code class="docutils literal notranslate"><span class="pre">show_flag_values</span></code></p>
  322. </div>
  323. </section>
  324. <hr class="docutils" />
  325. <section id="data-types">
  326. <h2>Data Types<a class="headerlink" href="#data-types" title="Link to this heading">¶</a></h2>
  327. <dl class="py class">
  328. <dt class="sig sig-object py" id="enum.EnumType">
  329. <em class="property"><span class="pre">class</span><span class="w"> </span></em><span class="sig-prename descclassname"><span class="pre">enum.</span></span><span class="sig-name descname"><span class="pre">EnumType</span></span><a class="headerlink" href="#enum.EnumType" title="Link to this definition">¶</a></dt>
  330. <dd><p><em>EnumType</em> is the <a class="reference internal" href="../glossary.html#term-metaclass"><span class="xref std std-term">metaclass</span></a> for <em>enum</em> enumerations. It is possible
  331. to subclass <em>EnumType</em> – see <a class="reference internal" href="../howto/enum.html#enumtype-examples"><span class="std std-ref">Subclassing EnumType</span></a>
  332. for details.</p>
  333. <p><em>EnumType</em> is responsible for setting the correct <code class="xref py py-meth docutils literal notranslate"><span class="pre">__repr__()</span></code>,
  334. <code class="xref py py-meth docutils literal notranslate"><span class="pre">__str__()</span></code>, <code class="xref py py-meth docutils literal notranslate"><span class="pre">__format__()</span></code>, and <code class="xref py py-meth docutils literal notranslate"><span class="pre">__reduce__()</span></code> methods on the
  335. final <em>enum</em>, as well as creating the enum members, properly handling
  336. duplicates, providing iteration over the enum class, etc.</p>
  337. <dl class="py method">
  338. <dt class="sig sig-object py" id="enum.EnumType.__call__">
  339. <span class="sig-name descname"><span class="pre">__call__</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">cls</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">value</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">names</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em>, <em class="sig-param"><span class="o"><span class="pre">*</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">module</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">qualname</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">type</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">start</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">1</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">boundary</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#enum.EnumType.__call__" title="Link to this definition">¶</a></dt>
  340. <dd><p>This method is called in two different ways:</p>
  341. <ul>
  342. <li><p>to look up an existing member:</p>
  343. <blockquote>
  344. <div><dl class="field-list simple">
  345. <dt class="field-odd">cls<span class="colon">:</span></dt>
  346. <dd class="field-odd"><p>The enum class being called.</p>
  347. </dd>
  348. <dt class="field-even">value<span class="colon">:</span></dt>
  349. <dd class="field-even"><p>The value to lookup.</p>
  350. </dd>
  351. </dl>
  352. </div></blockquote>
  353. </li>
  354. <li><p>to use the <code class="docutils literal notranslate"><span class="pre">cls</span></code> enum to create a new enum (only if the existing enum
  355. does not have any members):</p>
  356. <blockquote>
  357. <div><dl class="field-list simple">
  358. <dt class="field-odd">cls<span class="colon">:</span></dt>
  359. <dd class="field-odd"><p>The enum class being called.</p>
  360. </dd>
  361. <dt class="field-even">value<span class="colon">:</span></dt>
  362. <dd class="field-even"><p>The name of the new Enum to create.</p>
  363. </dd>
  364. <dt class="field-odd">names<span class="colon">:</span></dt>
  365. <dd class="field-odd"><p>The names/values of the members for the new Enum.</p>
  366. </dd>
  367. <dt class="field-even">module<span class="colon">:</span></dt>
  368. <dd class="field-even"><p>The name of the module the new Enum is created in.</p>
  369. </dd>
  370. <dt class="field-odd">qualname<span class="colon">:</span></dt>
  371. <dd class="field-odd"><p>The actual location in the module where this Enum can be found.</p>
  372. </dd>
  373. <dt class="field-even">type<span class="colon">:</span></dt>
  374. <dd class="field-even"><p>A mix-in type for the new Enum.</p>
  375. </dd>
  376. <dt class="field-odd">start<span class="colon">:</span></dt>
  377. <dd class="field-odd"><p>The first integer value for the Enum (used by <a class="reference internal" href="#enum.auto" title="enum.auto"><code class="xref py py-class docutils literal notranslate"><span class="pre">auto</span></code></a>).</p>
  378. </dd>
  379. <dt class="field-even">boundary<span class="colon">:</span></dt>
  380. <dd class="field-even"><p>How to handle out-of-range values from bit operations (<a class="reference internal" href="#enum.Flag" title="enum.Flag"><code class="xref py py-class docutils literal notranslate"><span class="pre">Flag</span></code></a> only).</p>
  381. </dd>
  382. </dl>
  383. </div></blockquote>
  384. </li>
  385. </ul>
  386. </dd></dl>
  387. <dl class="py method">
  388. <dt class="sig sig-object py" id="enum.EnumType.__contains__">
  389. <span class="sig-name descname"><span class="pre">__contains__</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">cls</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">member</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#enum.EnumType.__contains__" title="Link to this definition">¶</a></dt>
  390. <dd><p>Returns <code class="docutils literal notranslate"><span class="pre">True</span></code> if member belongs to the <code class="docutils literal notranslate"><span class="pre">cls</span></code>:</p>
  391. <div class="highlight-python3 notranslate"><div class="highlight"><pre><span></span><span class="gp">&gt;&gt;&gt; </span><span class="n">some_var</span> <span class="o">=</span> <span class="n">Color</span><span class="o">.</span><span class="n">RED</span>
  392. <span class="gp">&gt;&gt;&gt; </span><span class="n">some_var</span> <span class="ow">in</span> <span class="n">Color</span>
  393. <span class="go">True</span>
  394. <span class="gp">&gt;&gt;&gt; </span><span class="n">Color</span><span class="o">.</span><span class="n">RED</span><span class="o">.</span><span class="n">value</span> <span class="ow">in</span> <span class="n">Color</span>
  395. <span class="go">True</span>
  396. </pre></div>
  397. </div>
  398. </dd></dl>
  399. <div class="versionchanged">
  400. <p><span class="versionmodified changed">Changed in version 3.12: </span>Before Python 3.12, a <code class="docutils literal notranslate"><span class="pre">TypeError</span></code> is raised if a
  401. non-Enum-member is used in a containment check.</p>
  402. </div>
  403. <dl class="py method">
  404. <dt class="sig sig-object py" id="enum.EnumType.__dir__">
  405. <span class="sig-name descname"><span class="pre">__dir__</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">cls</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#enum.EnumType.__dir__" title="Link to this definition">¶</a></dt>
  406. <dd><p>Returns <code class="docutils literal notranslate"><span class="pre">['__class__',</span> <span class="pre">'__doc__',</span> <span class="pre">'__members__',</span> <span class="pre">'__module__']</span></code> and the
  407. names of the members in <em>cls</em>:</p>
  408. <div class="highlight-python3 notranslate"><div class="highlight"><pre><span></span><span class="gp">&gt;&gt;&gt; </span><span class="nb">dir</span><span class="p">(</span><span class="n">Color</span><span class="p">)</span>
  409. <span class="go">[&#39;BLUE&#39;, &#39;GREEN&#39;, &#39;RED&#39;, &#39;__class__&#39;, &#39;__contains__&#39;, &#39;__doc__&#39;, &#39;__getitem__&#39;, &#39;__init_subclass__&#39;, &#39;__iter__&#39;, &#39;__len__&#39;, &#39;__members__&#39;, &#39;__module__&#39;, &#39;__name__&#39;, &#39;__qualname__&#39;]</span>
  410. </pre></div>
  411. </div>
  412. </dd></dl>
  413. <dl class="py method">
  414. <dt class="sig sig-object py" id="enum.EnumType.__getitem__">
  415. <span class="sig-name descname"><span class="pre">__getitem__</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">cls</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">name</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#enum.EnumType.__getitem__" title="Link to this definition">¶</a></dt>
  416. <dd><p>Returns the Enum member in <em>cls</em> matching <em>name</em>, or raises a <a class="reference internal" href="exceptions.html#KeyError" title="KeyError"><code class="xref py py-exc docutils literal notranslate"><span class="pre">KeyError</span></code></a>:</p>
  417. <div class="highlight-python3 notranslate"><div class="highlight"><pre><span></span><span class="gp">&gt;&gt;&gt; </span><span class="n">Color</span><span class="p">[</span><span class="s1">&#39;BLUE&#39;</span><span class="p">]</span>
  418. <span class="go">&lt;Color.BLUE: 3&gt;</span>
  419. </pre></div>
  420. </div>
  421. </dd></dl>
  422. <dl class="py method">
  423. <dt class="sig sig-object py" id="enum.EnumType.__iter__">
  424. <span class="sig-name descname"><span class="pre">__iter__</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">cls</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#enum.EnumType.__iter__" title="Link to this definition">¶</a></dt>
  425. <dd><p>Returns each member in <em>cls</em> in definition order:</p>
  426. <div class="highlight-python3 notranslate"><div class="highlight"><pre><span></span><span class="gp">&gt;&gt;&gt; </span><span class="nb">list</span><span class="p">(</span><span class="n">Color</span><span class="p">)</span>
  427. <span class="go">[&lt;Color.RED: 1&gt;, &lt;Color.GREEN: 2&gt;, &lt;Color.BLUE: 3&gt;]</span>
  428. </pre></div>
  429. </div>
  430. </dd></dl>
  431. <dl class="py method">
  432. <dt class="sig sig-object py" id="enum.EnumType.__len__">
  433. <span class="sig-name descname"><span class="pre">__len__</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">cls</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#enum.EnumType.__len__" title="Link to this definition">¶</a></dt>
  434. <dd><p>Returns the number of member in <em>cls</em>:</p>
  435. <div class="highlight-python3 notranslate"><div class="highlight"><pre><span></span><span class="gp">&gt;&gt;&gt; </span><span class="nb">len</span><span class="p">(</span><span class="n">Color</span><span class="p">)</span>
  436. <span class="go">3</span>
  437. </pre></div>
  438. </div>
  439. </dd></dl>
  440. <dl class="py attribute">
  441. <dt class="sig sig-object py" id="enum.EnumType.__members__">
  442. <span class="sig-name descname"><span class="pre">__members__</span></span><a class="headerlink" href="#enum.EnumType.__members__" title="Link to this definition">¶</a></dt>
  443. <dd><p>Returns a mapping of every enum name to its member, including aliases</p>
  444. </dd></dl>
  445. <dl class="py method">
  446. <dt class="sig sig-object py" id="enum.EnumType.__reversed__">
  447. <span class="sig-name descname"><span class="pre">__reversed__</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">cls</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#enum.EnumType.__reversed__" title="Link to this definition">¶</a></dt>
  448. <dd><p>Returns each member in <em>cls</em> in reverse definition order:</p>
  449. <div class="highlight-python3 notranslate"><div class="highlight"><pre><span></span><span class="gp">&gt;&gt;&gt; </span><span class="nb">list</span><span class="p">(</span><span class="nb">reversed</span><span class="p">(</span><span class="n">Color</span><span class="p">))</span>
  450. <span class="go">[&lt;Color.BLUE: 3&gt;, &lt;Color.GREEN: 2&gt;, &lt;Color.RED: 1&gt;]</span>
  451. </pre></div>
  452. </div>
  453. </dd></dl>
  454. <div class="versionadded">
  455. <p><span class="versionmodified added">New in version 3.11: </span>Before 3.11 <code class="docutils literal notranslate"><span class="pre">enum</span></code> used <code class="docutils literal notranslate"><span class="pre">EnumMeta</span></code> type, which is kept as an alias.</p>
  456. </div>
  457. </dd></dl>
  458. <dl class="py class">
  459. <dt class="sig sig-object py" id="enum.Enum">
  460. <em class="property"><span class="pre">class</span><span class="w"> </span></em><span class="sig-prename descclassname"><span class="pre">enum.</span></span><span class="sig-name descname"><span class="pre">Enum</span></span><a class="headerlink" href="#enum.Enum" title="Link to this definition">¶</a></dt>
  461. <dd><p><em>Enum</em> is the base class for all <em>enum</em> enumerations.</p>
  462. <dl class="py attribute">
  463. <dt class="sig sig-object py" id="enum.Enum.name">
  464. <span class="sig-name descname"><span class="pre">name</span></span><a class="headerlink" href="#enum.Enum.name" title="Link to this definition">¶</a></dt>
  465. <dd><p>The name used to define the <code class="docutils literal notranslate"><span class="pre">Enum</span></code> member:</p>
  466. <div class="highlight-python3 notranslate"><div class="highlight"><pre><span></span><span class="gp">&gt;&gt;&gt; </span><span class="n">Color</span><span class="o">.</span><span class="n">BLUE</span><span class="o">.</span><span class="n">name</span>
  467. <span class="go">&#39;BLUE&#39;</span>
  468. </pre></div>
  469. </div>
  470. </dd></dl>
  471. <dl class="py attribute">
  472. <dt class="sig sig-object py" id="enum.Enum.value">
  473. <span class="sig-name descname"><span class="pre">value</span></span><a class="headerlink" href="#enum.Enum.value" title="Link to this definition">¶</a></dt>
  474. <dd><p>The value given to the <code class="docutils literal notranslate"><span class="pre">Enum</span></code> member:</p>
  475. <div class="highlight-python3 notranslate"><div class="highlight"><pre><span></span><span class="gp">&gt;&gt;&gt; </span><span class="n">Color</span><span class="o">.</span><span class="n">RED</span><span class="o">.</span><span class="n">value</span>
  476. <span class="go">1</span>
  477. </pre></div>
  478. </div>
  479. <p>Value of the member, can be set in <a class="reference internal" href="../reference/datamodel.html#object.__new__" title="object.__new__"><code class="xref py py-meth docutils literal notranslate"><span class="pre">__new__()</span></code></a>.</p>
  480. <div class="admonition note">
  481. <p class="admonition-title">Note</p>
  482. <p>Enum member values</p>
  483. <p>Member values can be anything: <a class="reference internal" href="functions.html#int" title="int"><code class="xref py py-class docutils literal notranslate"><span class="pre">int</span></code></a>, <a class="reference internal" href="stdtypes.html#str" title="str"><code class="xref py py-class docutils literal notranslate"><span class="pre">str</span></code></a>, etc. If
  484. the exact value is unimportant you may use <a class="reference internal" href="#enum.auto" title="enum.auto"><code class="xref py py-class docutils literal notranslate"><span class="pre">auto</span></code></a> instances and an
  485. appropriate value will be chosen for you. See <a class="reference internal" href="#enum.auto" title="enum.auto"><code class="xref py py-class docutils literal notranslate"><span class="pre">auto</span></code></a> for the
  486. details.</p>
  487. <p>While mutable/unhashable values, such as <a class="reference internal" href="stdtypes.html#dict" title="dict"><code class="xref py py-class docutils literal notranslate"><span class="pre">dict</span></code></a>, <a class="reference internal" href="stdtypes.html#list" title="list"><code class="xref py py-class docutils literal notranslate"><span class="pre">list</span></code></a> or
  488. a mutable <a class="reference internal" href="dataclasses.html#dataclasses.dataclass" title="dataclasses.dataclass"><code class="xref py py-class docutils literal notranslate"><span class="pre">dataclass</span></code></a>, can be used, they will have a
  489. quadratic performance impact during creation relative to the
  490. total number of mutable/unhashable values in the enum.</p>
  491. </div>
  492. </dd></dl>
  493. <dl class="py attribute">
  494. <dt class="sig sig-object py" id="enum.Enum._name_">
  495. <span class="sig-name descname"><span class="pre">_name_</span></span><a class="headerlink" href="#enum.Enum._name_" title="Link to this definition">¶</a></dt>
  496. <dd><p>Name of the member.</p>
  497. </dd></dl>
  498. <dl class="py attribute">
  499. <dt class="sig sig-object py" id="enum.Enum._value_">
  500. <span class="sig-name descname"><span class="pre">_value_</span></span><a class="headerlink" href="#enum.Enum._value_" title="Link to this definition">¶</a></dt>
  501. <dd><p>Value of the member, can be set in <a class="reference internal" href="../reference/datamodel.html#object.__new__" title="object.__new__"><code class="xref py py-meth docutils literal notranslate"><span class="pre">__new__()</span></code></a>.</p>
  502. </dd></dl>
  503. <dl class="py attribute">
  504. <dt class="sig sig-object py" id="enum.Enum._order_">
  505. <span class="sig-name descname"><span class="pre">_order_</span></span><a class="headerlink" href="#enum.Enum._order_" title="Link to this definition">¶</a></dt>
  506. <dd><p>No longer used, kept for backward compatibility.
  507. (class attribute, removed during class creation).</p>
  508. </dd></dl>
  509. <dl class="py attribute">
  510. <dt class="sig sig-object py" id="enum.Enum._ignore_">
  511. <span class="sig-name descname"><span class="pre">_ignore_</span></span><a class="headerlink" href="#enum.Enum._ignore_" title="Link to this definition">¶</a></dt>
  512. <dd><p><code class="docutils literal notranslate"><span class="pre">_ignore_</span></code> is only used during creation and is removed from the
  513. enumeration once creation is complete.</p>
  514. <p><code class="docutils literal notranslate"><span class="pre">_ignore_</span></code> is a list of names that will not become members, and whose
  515. names will also be removed from the completed enumeration. See
  516. <a class="reference internal" href="../howto/enum.html#enum-time-period"><span class="std std-ref">TimePeriod</span></a> for an example.</p>
  517. </dd></dl>
  518. <dl class="py method">
  519. <dt class="sig sig-object py" id="enum.Enum.__dir__">
  520. <span class="sig-name descname"><span class="pre">__dir__</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">self</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#enum.Enum.__dir__" title="Link to this definition">¶</a></dt>
  521. <dd><p>Returns <code class="docutils literal notranslate"><span class="pre">['__class__',</span> <span class="pre">'__doc__',</span> <span class="pre">'__module__',</span> <span class="pre">'name',</span> <span class="pre">'value']</span></code> and
  522. any public methods defined on <em>self.__class__</em>:</p>
  523. <div class="highlight-python3 notranslate"><div class="highlight"><pre><span></span><span class="gp">&gt;&gt;&gt; </span><span class="kn">from</span> <span class="nn">datetime</span> <span class="kn">import</span> <span class="n">date</span>
  524. <span class="gp">&gt;&gt;&gt; </span><span class="k">class</span> <span class="nc">Weekday</span><span class="p">(</span><span class="n">Enum</span><span class="p">):</span>
  525. <span class="gp">... </span> <span class="n">MONDAY</span> <span class="o">=</span> <span class="mi">1</span>
  526. <span class="gp">... </span> <span class="n">TUESDAY</span> <span class="o">=</span> <span class="mi">2</span>
  527. <span class="gp">... </span> <span class="n">WEDNESDAY</span> <span class="o">=</span> <span class="mi">3</span>
  528. <span class="gp">... </span> <span class="n">THURSDAY</span> <span class="o">=</span> <span class="mi">4</span>
  529. <span class="gp">... </span> <span class="n">FRIDAY</span> <span class="o">=</span> <span class="mi">5</span>
  530. <span class="gp">... </span> <span class="n">SATURDAY</span> <span class="o">=</span> <span class="mi">6</span>
  531. <span class="gp">... </span> <span class="n">SUNDAY</span> <span class="o">=</span> <span class="mi">7</span>
  532. <span class="gp">... </span> <span class="nd">@classmethod</span>
  533. <span class="gp">... </span> <span class="k">def</span> <span class="nf">today</span><span class="p">(</span><span class="bp">cls</span><span class="p">):</span>
  534. <span class="gp">... </span> <span class="nb">print</span><span class="p">(</span><span class="s1">&#39;today is </span><span class="si">%s</span><span class="s1">&#39;</span> <span class="o">%</span> <span class="bp">cls</span><span class="p">(</span><span class="n">date</span><span class="o">.</span><span class="n">today</span><span class="p">()</span><span class="o">.</span><span class="n">isoweekday</span><span class="p">())</span><span class="o">.</span><span class="n">name</span><span class="p">)</span>
  535. <span class="gp">...</span>
  536. <span class="gp">&gt;&gt;&gt; </span><span class="nb">dir</span><span class="p">(</span><span class="n">Weekday</span><span class="o">.</span><span class="n">SATURDAY</span><span class="p">)</span>
  537. <span class="go">[&#39;__class__&#39;, &#39;__doc__&#39;, &#39;__eq__&#39;, &#39;__hash__&#39;, &#39;__module__&#39;, &#39;name&#39;, &#39;today&#39;, &#39;value&#39;]</span>
  538. </pre></div>
  539. </div>
  540. </dd></dl>
  541. <dl class="py method">
  542. <dt class="sig sig-object py" id="enum.Enum._generate_next_value_">
  543. <span class="sig-name descname"><span class="pre">_generate_next_value_</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">name</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">start</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">count</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">last_values</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#enum.Enum._generate_next_value_" title="Link to this definition">¶</a></dt>
  544. <dd><blockquote>
  545. <div><dl class="field-list simple">
  546. <dt class="field-odd">name<span class="colon">:</span></dt>
  547. <dd class="field-odd"><p>The name of the member being defined (e.g. ‘RED’).</p>
  548. </dd>
  549. <dt class="field-even">start<span class="colon">:</span></dt>
  550. <dd class="field-even"><p>The start value for the Enum; the default is 1.</p>
  551. </dd>
  552. <dt class="field-odd">count<span class="colon">:</span></dt>
  553. <dd class="field-odd"><p>The number of members currently defined, not including this one.</p>
  554. </dd>
  555. <dt class="field-even">last_values<span class="colon">:</span></dt>
  556. <dd class="field-even"><p>A list of the previous values.</p>
  557. </dd>
  558. </dl>
  559. </div></blockquote>
  560. <p>A <em>staticmethod</em> that is used to determine the next value returned by
  561. <a class="reference internal" href="#enum.auto" title="enum.auto"><code class="xref py py-class docutils literal notranslate"><span class="pre">auto</span></code></a>:</p>
  562. <div class="highlight-python3 notranslate"><div class="highlight"><pre><span></span><span class="gp">&gt;&gt;&gt; </span><span class="kn">from</span> <span class="nn">enum</span> <span class="kn">import</span> <span class="n">auto</span>
  563. <span class="gp">&gt;&gt;&gt; </span><span class="k">class</span> <span class="nc">PowersOfThree</span><span class="p">(</span><span class="n">Enum</span><span class="p">):</span>
  564. <span class="gp">... </span> <span class="nd">@staticmethod</span>
  565. <span class="gp">... </span> <span class="k">def</span> <span class="nf">_generate_next_value_</span><span class="p">(</span><span class="n">name</span><span class="p">,</span> <span class="n">start</span><span class="p">,</span> <span class="n">count</span><span class="p">,</span> <span class="n">last_values</span><span class="p">):</span>
  566. <span class="gp">... </span> <span class="k">return</span> <span class="mi">3</span> <span class="o">**</span> <span class="p">(</span><span class="n">count</span> <span class="o">+</span> <span class="mi">1</span><span class="p">)</span>
  567. <span class="gp">... </span> <span class="n">FIRST</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
  568. <span class="gp">... </span> <span class="n">SECOND</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
  569. <span class="gp">...</span>
  570. <span class="gp">&gt;&gt;&gt; </span><span class="n">PowersOfThree</span><span class="o">.</span><span class="n">SECOND</span><span class="o">.</span><span class="n">value</span>
  571. <span class="go">9</span>
  572. </pre></div>
  573. </div>
  574. </dd></dl>
  575. <dl class="py method">
  576. <dt class="sig sig-object py" id="enum.Enum.__init__">
  577. <span class="sig-name descname"><span class="pre">__init__</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">self</span></span></em>, <em class="sig-param"><span class="o"><span class="pre">*</span></span><span class="n"><span class="pre">args</span></span></em>, <em class="sig-param"><span class="o"><span class="pre">**</span></span><span class="n"><span class="pre">kwds</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#enum.Enum.__init__" title="Link to this definition">¶</a></dt>
  578. <dd><p>By default, does nothing. If multiple values are given in the member
  579. assignment, those values become separate arguments to <code class="docutils literal notranslate"><span class="pre">__init__</span></code>; e.g.</p>
  580. <div class="doctest highlight-default notranslate"><div class="highlight"><pre><span></span><span class="gp">&gt;&gt;&gt; </span><span class="kn">from</span> <span class="nn">enum</span> <span class="kn">import</span> <span class="n">Enum</span>
  581. <span class="gp">&gt;&gt;&gt; </span><span class="k">class</span> <span class="nc">Weekday</span><span class="p">(</span><span class="n">Enum</span><span class="p">):</span>
  582. <span class="gp">... </span> <span class="n">MONDAY</span> <span class="o">=</span> <span class="mi">1</span><span class="p">,</span> <span class="s1">&#39;Mon&#39;</span>
  583. </pre></div>
  584. </div>
  585. <p><code class="docutils literal notranslate"><span class="pre">Weekday.__init__()</span></code> would be called as <code class="docutils literal notranslate"><span class="pre">Weekday.__init__(self,</span> <span class="pre">1,</span> <span class="pre">'Mon')</span></code></p>
  586. </dd></dl>
  587. <dl class="py method">
  588. <dt class="sig sig-object py" id="enum.Enum.__init_subclass__">
  589. <span class="sig-name descname"><span class="pre">__init_subclass__</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">cls</span></span></em>, <em class="sig-param"><span class="o"><span class="pre">**</span></span><span class="n"><span class="pre">kwds</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#enum.Enum.__init_subclass__" title="Link to this definition">¶</a></dt>
  590. <dd><p>A <em>classmethod</em> that is used to further configure subsequent subclasses.
  591. By default, does nothing.</p>
  592. </dd></dl>
  593. <dl class="py method">
  594. <dt class="sig sig-object py" id="enum.Enum._missing_">
  595. <span class="sig-name descname"><span class="pre">_missing_</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">cls</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">value</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#enum.Enum._missing_" title="Link to this definition">¶</a></dt>
  596. <dd><p>A <em>classmethod</em> for looking up values not found in <em>cls</em>. By default it
  597. does nothing, but can be overridden to implement custom search behavior:</p>
  598. <div class="highlight-python3 notranslate"><div class="highlight"><pre><span></span><span class="gp">&gt;&gt;&gt; </span><span class="kn">from</span> <span class="nn">enum</span> <span class="kn">import</span> <span class="n">StrEnum</span>
  599. <span class="gp">&gt;&gt;&gt; </span><span class="k">class</span> <span class="nc">Build</span><span class="p">(</span><span class="n">StrEnum</span><span class="p">):</span>
  600. <span class="gp">... </span> <span class="n">DEBUG</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
  601. <span class="gp">... </span> <span class="n">OPTIMIZED</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
  602. <span class="gp">... </span> <span class="nd">@classmethod</span>
  603. <span class="gp">... </span> <span class="k">def</span> <span class="nf">_missing_</span><span class="p">(</span><span class="bp">cls</span><span class="p">,</span> <span class="n">value</span><span class="p">):</span>
  604. <span class="gp">... </span> <span class="n">value</span> <span class="o">=</span> <span class="n">value</span><span class="o">.</span><span class="n">lower</span><span class="p">()</span>
  605. <span class="gp">... </span> <span class="k">for</span> <span class="n">member</span> <span class="ow">in</span> <span class="bp">cls</span><span class="p">:</span>
  606. <span class="gp">... </span> <span class="k">if</span> <span class="n">member</span><span class="o">.</span><span class="n">value</span> <span class="o">==</span> <span class="n">value</span><span class="p">:</span>
  607. <span class="gp">... </span> <span class="k">return</span> <span class="n">member</span>
  608. <span class="gp">... </span> <span class="k">return</span> <span class="kc">None</span>
  609. <span class="gp">...</span>
  610. <span class="gp">&gt;&gt;&gt; </span><span class="n">Build</span><span class="o">.</span><span class="n">DEBUG</span><span class="o">.</span><span class="n">value</span>
  611. <span class="go">&#39;debug&#39;</span>
  612. <span class="gp">&gt;&gt;&gt; </span><span class="n">Build</span><span class="p">(</span><span class="s1">&#39;deBUG&#39;</span><span class="p">)</span>
  613. <span class="go">&lt;Build.DEBUG: &#39;debug&#39;&gt;</span>
  614. </pre></div>
  615. </div>
  616. </dd></dl>
  617. <dl class="py method">
  618. <dt class="sig sig-object py" id="enum.Enum.__new__">
  619. <span class="sig-name descname"><span class="pre">__new__</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">cls</span></span></em>, <em class="sig-param"><span class="o"><span class="pre">*</span></span><span class="n"><span class="pre">args</span></span></em>, <em class="sig-param"><span class="o"><span class="pre">**</span></span><span class="n"><span class="pre">kwds</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#enum.Enum.__new__" title="Link to this definition">¶</a></dt>
  620. <dd><p>By default, doesn’t exist. If specified, either in the enum class
  621. definition or in a mixin class (such as <code class="docutils literal notranslate"><span class="pre">int</span></code>), all values given
  622. in the member assignment will be passed; e.g.</p>
  623. <div class="doctest highlight-default notranslate"><div class="highlight"><pre><span></span><span class="gp">&gt;&gt;&gt; </span><span class="kn">from</span> <span class="nn">enum</span> <span class="kn">import</span> <span class="n">Enum</span>
  624. <span class="gp">&gt;&gt;&gt; </span><span class="k">class</span> <span class="nc">MyIntEnum</span><span class="p">(</span><span class="n">Enum</span><span class="p">):</span>
  625. <span class="gp">... </span> <span class="n">SEVENTEEN</span> <span class="o">=</span> <span class="s1">&#39;1a&#39;</span><span class="p">,</span> <span class="mi">16</span>
  626. </pre></div>
  627. </div>
  628. <p>results in the call <code class="docutils literal notranslate"><span class="pre">int('1a',</span> <span class="pre">16)</span></code> and a value of <code class="docutils literal notranslate"><span class="pre">17</span></code> for the member.</p>
  629. <dl class="simple">
  630. <dt>..note:: When writing a custom <code class="docutils literal notranslate"><span class="pre">__new__</span></code>, do not use <code class="docutils literal notranslate"><span class="pre">super().__new__</span></code> –</dt><dd><p>call the appropriate <code class="docutils literal notranslate"><span class="pre">__new__</span></code> instead.</p>
  631. </dd>
  632. </dl>
  633. </dd></dl>
  634. <dl class="py method">
  635. <dt class="sig sig-object py" id="enum.Enum.__repr__">
  636. <span class="sig-name descname"><span class="pre">__repr__</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">self</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#enum.Enum.__repr__" title="Link to this definition">¶</a></dt>
  637. <dd><p>Returns the string used for <em>repr()</em> calls. By default, returns the
  638. <em>Enum</em> name, member name, and value, but can be overridden:</p>
  639. <div class="highlight-python3 notranslate"><div class="highlight"><pre><span></span><span class="gp">&gt;&gt;&gt; </span><span class="k">class</span> <span class="nc">OtherStyle</span><span class="p">(</span><span class="n">Enum</span><span class="p">):</span>
  640. <span class="gp">... </span> <span class="n">ALTERNATE</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
  641. <span class="gp">... </span> <span class="n">OTHER</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
  642. <span class="gp">... </span> <span class="n">SOMETHING_ELSE</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
  643. <span class="gp">... </span> <span class="k">def</span> <span class="fm">__repr__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
  644. <span class="gp">... </span> <span class="n">cls_name</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="vm">__class__</span><span class="o">.</span><span class="vm">__name__</span>
  645. <span class="gp">... </span> <span class="k">return</span> <span class="sa">f</span><span class="s1">&#39;</span><span class="si">{</span><span class="n">cls_name</span><span class="si">}</span><span class="s1">.</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">name</span><span class="si">}</span><span class="s1">&#39;</span>
  646. <span class="gp">...</span>
  647. <span class="gp">&gt;&gt;&gt; </span><span class="n">OtherStyle</span><span class="o">.</span><span class="n">ALTERNATE</span><span class="p">,</span> <span class="nb">str</span><span class="p">(</span><span class="n">OtherStyle</span><span class="o">.</span><span class="n">ALTERNATE</span><span class="p">),</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">OtherStyle</span><span class="o">.</span><span class="n">ALTERNATE</span><span class="si">}</span><span class="s2">&quot;</span>
  648. <span class="go">(OtherStyle.ALTERNATE, &#39;OtherStyle.ALTERNATE&#39;, &#39;OtherStyle.ALTERNATE&#39;)</span>
  649. </pre></div>
  650. </div>
  651. </dd></dl>
  652. <dl class="py method">
  653. <dt class="sig sig-object py" id="enum.Enum.__str__">
  654. <span class="sig-name descname"><span class="pre">__str__</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">self</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#enum.Enum.__str__" title="Link to this definition">¶</a></dt>
  655. <dd><p>Returns the string used for <em>str()</em> calls. By default, returns the
  656. <em>Enum</em> name and member name, but can be overridden:</p>
  657. <div class="highlight-python3 notranslate"><div class="highlight"><pre><span></span><span class="gp">&gt;&gt;&gt; </span><span class="k">class</span> <span class="nc">OtherStyle</span><span class="p">(</span><span class="n">Enum</span><span class="p">):</span>
  658. <span class="gp">... </span> <span class="n">ALTERNATE</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
  659. <span class="gp">... </span> <span class="n">OTHER</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
  660. <span class="gp">... </span> <span class="n">SOMETHING_ELSE</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
  661. <span class="gp">... </span> <span class="k">def</span> <span class="fm">__str__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
  662. <span class="gp">... </span> <span class="k">return</span> <span class="sa">f</span><span class="s1">&#39;</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">name</span><span class="si">}</span><span class="s1">&#39;</span>
  663. <span class="gp">...</span>
  664. <span class="gp">&gt;&gt;&gt; </span><span class="n">OtherStyle</span><span class="o">.</span><span class="n">ALTERNATE</span><span class="p">,</span> <span class="nb">str</span><span class="p">(</span><span class="n">OtherStyle</span><span class="o">.</span><span class="n">ALTERNATE</span><span class="p">),</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">OtherStyle</span><span class="o">.</span><span class="n">ALTERNATE</span><span class="si">}</span><span class="s2">&quot;</span>
  665. <span class="go">(&lt;OtherStyle.ALTERNATE: 1&gt;, &#39;ALTERNATE&#39;, &#39;ALTERNATE&#39;)</span>
  666. </pre></div>
  667. </div>
  668. </dd></dl>
  669. <dl class="py method">
  670. <dt class="sig sig-object py" id="enum.Enum.__format__">
  671. <span class="sig-name descname"><span class="pre">__format__</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">self</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#enum.Enum.__format__" title="Link to this definition">¶</a></dt>
  672. <dd><p>Returns the string used for <em>format()</em> and <em>f-string</em> calls. By default,
  673. returns <a class="reference internal" href="#enum.Enum.__str__" title="enum.Enum.__str__"><code class="xref py py-meth docutils literal notranslate"><span class="pre">__str__()</span></code></a> return value, but can be overridden:</p>
  674. <div class="highlight-python3 notranslate"><div class="highlight"><pre><span></span><span class="gp">&gt;&gt;&gt; </span><span class="k">class</span> <span class="nc">OtherStyle</span><span class="p">(</span><span class="n">Enum</span><span class="p">):</span>
  675. <span class="gp">... </span> <span class="n">ALTERNATE</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
  676. <span class="gp">... </span> <span class="n">OTHER</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
  677. <span class="gp">... </span> <span class="n">SOMETHING_ELSE</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
  678. <span class="gp">... </span> <span class="k">def</span> <span class="fm">__format__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">spec</span><span class="p">):</span>
  679. <span class="gp">... </span> <span class="k">return</span> <span class="sa">f</span><span class="s1">&#39;</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">name</span><span class="si">}</span><span class="s1">&#39;</span>
  680. <span class="gp">...</span>
  681. <span class="gp">&gt;&gt;&gt; </span><span class="n">OtherStyle</span><span class="o">.</span><span class="n">ALTERNATE</span><span class="p">,</span> <span class="nb">str</span><span class="p">(</span><span class="n">OtherStyle</span><span class="o">.</span><span class="n">ALTERNATE</span><span class="p">),</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">OtherStyle</span><span class="o">.</span><span class="n">ALTERNATE</span><span class="si">}</span><span class="s2">&quot;</span>
  682. <span class="go">(&lt;OtherStyle.ALTERNATE: 1&gt;, &#39;OtherStyle.ALTERNATE&#39;, &#39;ALTERNATE&#39;)</span>
  683. </pre></div>
  684. </div>
  685. </dd></dl>
  686. <div class="admonition note">
  687. <p class="admonition-title">Note</p>
  688. <p>Using <a class="reference internal" href="#enum.auto" title="enum.auto"><code class="xref py py-class docutils literal notranslate"><span class="pre">auto</span></code></a> with <a class="reference internal" href="#enum.Enum" title="enum.Enum"><code class="xref py py-class docutils literal notranslate"><span class="pre">Enum</span></code></a> results in integers of increasing value,
  689. starting with <code class="docutils literal notranslate"><span class="pre">1</span></code>.</p>
  690. </div>
  691. <div class="versionchanged">
  692. <p><span class="versionmodified changed">Changed in version 3.12: </span>Added <a class="reference internal" href="../howto/enum.html#enum-dataclass-support"><span class="std std-ref">Dataclass support</span></a></p>
  693. </div>
  694. </dd></dl>
  695. <dl class="py class">
  696. <dt class="sig sig-object py" id="enum.IntEnum">
  697. <em class="property"><span class="pre">class</span><span class="w"> </span></em><span class="sig-prename descclassname"><span class="pre">enum.</span></span><span class="sig-name descname"><span class="pre">IntEnum</span></span><a class="headerlink" href="#enum.IntEnum" title="Link to this definition">¶</a></dt>
  698. <dd><p><em>IntEnum</em> is the same as <em>Enum</em>, but its members are also integers and can be
  699. used anywhere that an integer can be used. If any integer operation is performed
  700. with an <em>IntEnum</em> member, the resulting value loses its enumeration status.</p>
  701. <div class="doctest highlight-default notranslate"><div class="highlight"><pre><span></span><span class="gp">&gt;&gt;&gt; </span><span class="kn">from</span> <span class="nn">enum</span> <span class="kn">import</span> <span class="n">IntEnum</span>
  702. <span class="gp">&gt;&gt;&gt; </span><span class="k">class</span> <span class="nc">Number</span><span class="p">(</span><span class="n">IntEnum</span><span class="p">):</span>
  703. <span class="gp">... </span> <span class="n">ONE</span> <span class="o">=</span> <span class="mi">1</span>
  704. <span class="gp">... </span> <span class="n">TWO</span> <span class="o">=</span> <span class="mi">2</span>
  705. <span class="gp">... </span> <span class="n">THREE</span> <span class="o">=</span> <span class="mi">3</span>
  706. <span class="gp">...</span>
  707. <span class="gp">&gt;&gt;&gt; </span><span class="n">Number</span><span class="o">.</span><span class="n">THREE</span>
  708. <span class="go">&lt;Number.THREE: 3&gt;</span>
  709. <span class="gp">&gt;&gt;&gt; </span><span class="n">Number</span><span class="o">.</span><span class="n">ONE</span> <span class="o">+</span> <span class="n">Number</span><span class="o">.</span><span class="n">TWO</span>
  710. <span class="go">3</span>
  711. <span class="gp">&gt;&gt;&gt; </span><span class="n">Number</span><span class="o">.</span><span class="n">THREE</span> <span class="o">+</span> <span class="mi">5</span>
  712. <span class="go">8</span>
  713. <span class="gp">&gt;&gt;&gt; </span><span class="n">Number</span><span class="o">.</span><span class="n">THREE</span> <span class="o">==</span> <span class="mi">3</span>
  714. <span class="go">True</span>
  715. </pre></div>
  716. </div>
  717. <div class="admonition note">
  718. <p class="admonition-title">Note</p>
  719. <p>Using <a class="reference internal" href="#enum.auto" title="enum.auto"><code class="xref py py-class docutils literal notranslate"><span class="pre">auto</span></code></a> with <a class="reference internal" href="#enum.IntEnum" title="enum.IntEnum"><code class="xref py py-class docutils literal notranslate"><span class="pre">IntEnum</span></code></a> results in integers of increasing
  720. value, starting with <code class="docutils literal notranslate"><span class="pre">1</span></code>.</p>
  721. </div>
  722. <div class="versionchanged">
  723. <p><span class="versionmodified changed">Changed in version 3.11: </span><a class="reference internal" href="../reference/datamodel.html#object.__str__" title="object.__str__"><code class="xref py py-meth docutils literal notranslate"><span class="pre">__str__()</span></code></a> is now <code class="xref py py-meth docutils literal notranslate"><span class="pre">int.__str__()</span></code> to
  724. better support the <em>replacement of existing constants</em> use-case.
  725. <a class="reference internal" href="../reference/datamodel.html#object.__format__" title="object.__format__"><code class="xref py py-meth docutils literal notranslate"><span class="pre">__format__()</span></code></a> was already <code class="xref py py-meth docutils literal notranslate"><span class="pre">int.__format__()</span></code> for that same reason.</p>
  726. </div>
  727. </dd></dl>
  728. <dl class="py class">
  729. <dt class="sig sig-object py" id="enum.StrEnum">
  730. <em class="property"><span class="pre">class</span><span class="w"> </span></em><span class="sig-prename descclassname"><span class="pre">enum.</span></span><span class="sig-name descname"><span class="pre">StrEnum</span></span><a class="headerlink" href="#enum.StrEnum" title="Link to this definition">¶</a></dt>
  731. <dd><p><em>StrEnum</em> is the same as <em>Enum</em>, but its members are also strings and can be used
  732. in most of the same places that a string can be used. The result of any string
  733. operation performed on or with a <em>StrEnum</em> member is not part of the enumeration.</p>
  734. <div class="admonition note">
  735. <p class="admonition-title">Note</p>
  736. <p>There are places in the stdlib that check for an exact <a class="reference internal" href="stdtypes.html#str" title="str"><code class="xref py py-class docutils literal notranslate"><span class="pre">str</span></code></a>
  737. instead of a <a class="reference internal" href="stdtypes.html#str" title="str"><code class="xref py py-class docutils literal notranslate"><span class="pre">str</span></code></a> subclass (i.e. <code class="docutils literal notranslate"><span class="pre">type(unknown)</span> <span class="pre">==</span> <span class="pre">str</span></code>
  738. instead of <code class="docutils literal notranslate"><span class="pre">isinstance(unknown,</span> <span class="pre">str)</span></code>), and in those locations you
  739. will need to use <code class="docutils literal notranslate"><span class="pre">str(StrEnum.member)</span></code>.</p>
  740. </div>
  741. <div class="admonition note">
  742. <p class="admonition-title">Note</p>
  743. <p>Using <a class="reference internal" href="#enum.auto" title="enum.auto"><code class="xref py py-class docutils literal notranslate"><span class="pre">auto</span></code></a> with <a class="reference internal" href="#enum.StrEnum" title="enum.StrEnum"><code class="xref py py-class docutils literal notranslate"><span class="pre">StrEnum</span></code></a> results in the lower-cased member
  744. name as the value.</p>
  745. </div>
  746. <div class="admonition note">
  747. <p class="admonition-title">Note</p>
  748. <p><a class="reference internal" href="../reference/datamodel.html#object.__str__" title="object.__str__"><code class="xref py py-meth docutils literal notranslate"><span class="pre">__str__()</span></code></a> is <code class="xref py py-meth docutils literal notranslate"><span class="pre">str.__str__()</span></code> to better support the
  749. <em>replacement of existing constants</em> use-case. <a class="reference internal" href="../reference/datamodel.html#object.__format__" title="object.__format__"><code class="xref py py-meth docutils literal notranslate"><span class="pre">__format__()</span></code></a> is likewise
  750. <code class="xref py py-meth docutils literal notranslate"><span class="pre">str.__format__()</span></code> for that same reason.</p>
  751. </div>
  752. <div class="versionadded">
  753. <p><span class="versionmodified added">New in version 3.11.</span></p>
  754. </div>
  755. </dd></dl>
  756. <dl class="py class">
  757. <dt class="sig sig-object py" id="enum.Flag">
  758. <em class="property"><span class="pre">class</span><span class="w"> </span></em><span class="sig-prename descclassname"><span class="pre">enum.</span></span><span class="sig-name descname"><span class="pre">Flag</span></span><a class="headerlink" href="#enum.Flag" title="Link to this definition">¶</a></dt>
  759. <dd><p><code class="docutils literal notranslate"><span class="pre">Flag</span></code> is the same as <a class="reference internal" href="#enum.Enum" title="enum.Enum"><code class="xref py py-class docutils literal notranslate"><span class="pre">Enum</span></code></a>, but its members support the bitwise
  760. operators <code class="docutils literal notranslate"><span class="pre">&amp;</span></code> (<em>AND</em>), <code class="docutils literal notranslate"><span class="pre">|</span></code> (<em>OR</em>), <code class="docutils literal notranslate"><span class="pre">^</span></code> (<em>XOR</em>), and <code class="docutils literal notranslate"><span class="pre">~</span></code> (<em>INVERT</em>);
  761. the results of those operators are members of the enumeration.</p>
  762. <dl class="py method">
  763. <dt class="sig sig-object py" id="enum.Flag.__contains__">
  764. <span class="sig-name descname"><span class="pre">__contains__</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">self</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">value</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#enum.Flag.__contains__" title="Link to this definition">¶</a></dt>
  765. <dd><p>Returns <em>True</em> if value is in self:</p>
  766. <div class="highlight-python3 notranslate"><div class="highlight"><pre><span></span><span class="gp">&gt;&gt;&gt; </span><span class="kn">from</span> <span class="nn">enum</span> <span class="kn">import</span> <span class="n">Flag</span><span class="p">,</span> <span class="n">auto</span>
  767. <span class="gp">&gt;&gt;&gt; </span><span class="k">class</span> <span class="nc">Color</span><span class="p">(</span><span class="n">Flag</span><span class="p">):</span>
  768. <span class="gp">... </span> <span class="n">RED</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
  769. <span class="gp">... </span> <span class="n">GREEN</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
  770. <span class="gp">... </span> <span class="n">BLUE</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
  771. <span class="gp">...</span>
  772. <span class="gp">&gt;&gt;&gt; </span><span class="n">purple</span> <span class="o">=</span> <span class="n">Color</span><span class="o">.</span><span class="n">RED</span> <span class="o">|</span> <span class="n">Color</span><span class="o">.</span><span class="n">BLUE</span>
  773. <span class="gp">&gt;&gt;&gt; </span><span class="n">white</span> <span class="o">=</span> <span class="n">Color</span><span class="o">.</span><span class="n">RED</span> <span class="o">|</span> <span class="n">Color</span><span class="o">.</span><span class="n">GREEN</span> <span class="o">|</span> <span class="n">Color</span><span class="o">.</span><span class="n">BLUE</span>
  774. <span class="gp">&gt;&gt;&gt; </span><span class="n">Color</span><span class="o">.</span><span class="n">GREEN</span> <span class="ow">in</span> <span class="n">purple</span>
  775. <span class="go">False</span>
  776. <span class="gp">&gt;&gt;&gt; </span><span class="n">Color</span><span class="o">.</span><span class="n">GREEN</span> <span class="ow">in</span> <span class="n">white</span>
  777. <span class="go">True</span>
  778. <span class="gp">&gt;&gt;&gt; </span><span class="n">purple</span> <span class="ow">in</span> <span class="n">white</span>
  779. <span class="go">True</span>
  780. <span class="gp">&gt;&gt;&gt; </span><span class="n">white</span> <span class="ow">in</span> <span class="n">purple</span>
  781. <span class="go">False</span>
  782. </pre></div>
  783. </div>
  784. </dd></dl>
  785. <dl class="py method">
  786. <dt class="sig sig-object py">
  787. <span class="sig-name descname"><span class="pre">__iter__(self):</span></span></dt>
  788. <dd><p>Returns all contained non-alias members:</p>
  789. <div class="highlight-python3 notranslate"><div class="highlight"><pre><span></span><span class="gp">&gt;&gt;&gt; </span><span class="nb">list</span><span class="p">(</span><span class="n">Color</span><span class="o">.</span><span class="n">RED</span><span class="p">)</span>
  790. <span class="go">[&lt;Color.RED: 1&gt;]</span>
  791. <span class="gp">&gt;&gt;&gt; </span><span class="nb">list</span><span class="p">(</span><span class="n">purple</span><span class="p">)</span>
  792. <span class="go">[&lt;Color.RED: 1&gt;, &lt;Color.BLUE: 4&gt;]</span>
  793. </pre></div>
  794. </div>
  795. <div class="versionadded">
  796. <p><span class="versionmodified added">New in version 3.11.</span></p>
  797. </div>
  798. </dd></dl>
  799. <dl class="py method">
  800. <dt class="sig sig-object py">
  801. <span class="sig-name descname"><span class="pre">__len__(self):</span></span></dt>
  802. <dd><p>Returns number of members in flag:</p>
  803. <div class="highlight-python3 notranslate"><div class="highlight"><pre><span></span><span class="gp">&gt;&gt;&gt; </span><span class="nb">len</span><span class="p">(</span><span class="n">Color</span><span class="o">.</span><span class="n">GREEN</span><span class="p">)</span>
  804. <span class="go">1</span>
  805. <span class="gp">&gt;&gt;&gt; </span><span class="nb">len</span><span class="p">(</span><span class="n">white</span><span class="p">)</span>
  806. <span class="go">3</span>
  807. </pre></div>
  808. </div>
  809. </dd></dl>
  810. <dl class="py method">
  811. <dt class="sig sig-object py">
  812. <span class="sig-name descname"><span class="pre">__bool__(self):</span></span></dt>
  813. <dd><p>Returns <em>True</em> if any members in flag, <em>False</em> otherwise:</p>
  814. <div class="highlight-python3 notranslate"><div class="highlight"><pre><span></span><span class="gp">&gt;&gt;&gt; </span><span class="nb">bool</span><span class="p">(</span><span class="n">Color</span><span class="o">.</span><span class="n">GREEN</span><span class="p">)</span>
  815. <span class="go">True</span>
  816. <span class="gp">&gt;&gt;&gt; </span><span class="nb">bool</span><span class="p">(</span><span class="n">white</span><span class="p">)</span>
  817. <span class="go">True</span>
  818. <span class="gp">&gt;&gt;&gt; </span><span class="n">black</span> <span class="o">=</span> <span class="n">Color</span><span class="p">(</span><span class="mi">0</span><span class="p">)</span>
  819. <span class="gp">&gt;&gt;&gt; </span><span class="nb">bool</span><span class="p">(</span><span class="n">black</span><span class="p">)</span>
  820. <span class="go">False</span>
  821. </pre></div>
  822. </div>
  823. </dd></dl>
  824. <dl class="py method">
  825. <dt class="sig sig-object py" id="enum.Flag.__or__">
  826. <span class="sig-name descname"><span class="pre">__or__</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">self</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">other</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#enum.Flag.__or__" title="Link to this definition">¶</a></dt>
  827. <dd><p>Returns current flag binary or’ed with other:</p>
  828. <div class="highlight-python3 notranslate"><div class="highlight"><pre><span></span><span class="gp">&gt;&gt;&gt; </span><span class="n">Color</span><span class="o">.</span><span class="n">RED</span> <span class="o">|</span> <span class="n">Color</span><span class="o">.</span><span class="n">GREEN</span>
  829. <span class="go">&lt;Color.RED|GREEN: 3&gt;</span>
  830. </pre></div>
  831. </div>
  832. </dd></dl>
  833. <dl class="py method">
  834. <dt class="sig sig-object py" id="enum.Flag.__and__">
  835. <span class="sig-name descname"><span class="pre">__and__</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">self</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">other</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#enum.Flag.__and__" title="Link to this definition">¶</a></dt>
  836. <dd><p>Returns current flag binary and’ed with other:</p>
  837. <div class="highlight-python3 notranslate"><div class="highlight"><pre><span></span><span class="gp">&gt;&gt;&gt; </span><span class="n">purple</span> <span class="o">&amp;</span> <span class="n">white</span>
  838. <span class="go">&lt;Color.RED|BLUE: 5&gt;</span>
  839. <span class="gp">&gt;&gt;&gt; </span><span class="n">purple</span> <span class="o">&amp;</span> <span class="n">Color</span><span class="o">.</span><span class="n">GREEN</span>
  840. <span class="go">&lt;Color: 0&gt;</span>
  841. </pre></div>
  842. </div>
  843. </dd></dl>
  844. <dl class="py method">
  845. <dt class="sig sig-object py" id="enum.Flag.__xor__">
  846. <span class="sig-name descname"><span class="pre">__xor__</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">self</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">other</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#enum.Flag.__xor__" title="Link to this definition">¶</a></dt>
  847. <dd><p>Returns current flag binary xor’ed with other:</p>
  848. <div class="highlight-python3 notranslate"><div class="highlight"><pre><span></span><span class="gp">&gt;&gt;&gt; </span><span class="n">purple</span> <span class="o">^</span> <span class="n">white</span>
  849. <span class="go">&lt;Color.GREEN: 2&gt;</span>
  850. <span class="gp">&gt;&gt;&gt; </span><span class="n">purple</span> <span class="o">^</span> <span class="n">Color</span><span class="o">.</span><span class="n">GREEN</span>
  851. <span class="go">&lt;Color.RED|GREEN|BLUE: 7&gt;</span>
  852. </pre></div>
  853. </div>
  854. </dd></dl>
  855. <dl class="py method">
  856. <dt class="sig sig-object py">
  857. <span class="sig-name descname"><span class="pre">__invert__(self):</span></span></dt>
  858. <dd><p>Returns all the flags in <em>type(self)</em> that are not in self:</p>
  859. <div class="highlight-python3 notranslate"><div class="highlight"><pre><span></span><span class="gp">&gt;&gt;&gt; </span><span class="o">~</span><span class="n">white</span>
  860. <span class="go">&lt;Color: 0&gt;</span>
  861. <span class="gp">&gt;&gt;&gt; </span><span class="o">~</span><span class="n">purple</span>
  862. <span class="go">&lt;Color.GREEN: 2&gt;</span>
  863. <span class="gp">&gt;&gt;&gt; </span><span class="o">~</span><span class="n">Color</span><span class="o">.</span><span class="n">RED</span>
  864. <span class="go">&lt;Color.GREEN|BLUE: 6&gt;</span>
  865. </pre></div>
  866. </div>
  867. </dd></dl>
  868. <dl class="py method">
  869. <dt class="sig sig-object py" id="enum.Flag._numeric_repr_">
  870. <span class="sig-name descname"><span class="pre">_numeric_repr_</span></span><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#enum.Flag._numeric_repr_" title="Link to this definition">¶</a></dt>
  871. <dd><p>Function used to format any remaining unnamed numeric values. Default is
  872. the value’s repr; common choices are <a class="reference internal" href="functions.html#hex" title="hex"><code class="xref py py-func docutils literal notranslate"><span class="pre">hex()</span></code></a> and <a class="reference internal" href="functions.html#oct" title="oct"><code class="xref py py-func docutils literal notranslate"><span class="pre">oct()</span></code></a>.</p>
  873. </dd></dl>
  874. <div class="admonition note">
  875. <p class="admonition-title">Note</p>
  876. <p>Using <a class="reference internal" href="#enum.auto" title="enum.auto"><code class="xref py py-class docutils literal notranslate"><span class="pre">auto</span></code></a> with <a class="reference internal" href="#enum.Flag" title="enum.Flag"><code class="xref py py-class docutils literal notranslate"><span class="pre">Flag</span></code></a> results in integers that are powers
  877. of two, starting with <code class="docutils literal notranslate"><span class="pre">1</span></code>.</p>
  878. </div>
  879. <div class="versionchanged">
  880. <p><span class="versionmodified changed">Changed in version 3.11: </span>The <em>repr()</em> of zero-valued flags has changed. It
  881. is now::</p>
  882. <div class="doctest highlight-default notranslate"><div class="highlight"><pre><span></span><span class="gp">&gt;&gt;&gt; </span><span class="n">Color</span><span class="p">(</span><span class="mi">0</span><span class="p">)</span>
  883. <span class="go">&lt;Color: 0&gt;</span>
  884. </pre></div>
  885. </div>
  886. </div>
  887. </dd></dl>
  888. <dl class="py class">
  889. <dt class="sig sig-object py" id="enum.IntFlag">
  890. <em class="property"><span class="pre">class</span><span class="w"> </span></em><span class="sig-prename descclassname"><span class="pre">enum.</span></span><span class="sig-name descname"><span class="pre">IntFlag</span></span><a class="headerlink" href="#enum.IntFlag" title="Link to this definition">¶</a></dt>
  891. <dd><p><em>IntFlag</em> is the same as <em>Flag</em>, but its members are also integers and can be
  892. used anywhere that an integer can be used.</p>
  893. <div class="doctest highlight-default notranslate"><div class="highlight"><pre><span></span><span class="gp">&gt;&gt;&gt; </span><span class="kn">from</span> <span class="nn">enum</span> <span class="kn">import</span> <span class="n">IntFlag</span><span class="p">,</span> <span class="n">auto</span>
  894. <span class="gp">&gt;&gt;&gt; </span><span class="k">class</span> <span class="nc">Color</span><span class="p">(</span><span class="n">IntFlag</span><span class="p">):</span>
  895. <span class="gp">... </span> <span class="n">RED</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
  896. <span class="gp">... </span> <span class="n">GREEN</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
  897. <span class="gp">... </span> <span class="n">BLUE</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
  898. <span class="gp">...</span>
  899. <span class="gp">&gt;&gt;&gt; </span><span class="n">Color</span><span class="o">.</span><span class="n">RED</span> <span class="o">&amp;</span> <span class="mi">2</span>
  900. <span class="go">&lt;Color: 0&gt;</span>
  901. <span class="gp">&gt;&gt;&gt; </span><span class="n">Color</span><span class="o">.</span><span class="n">RED</span> <span class="o">|</span> <span class="mi">2</span>
  902. <span class="go">&lt;Color.RED|GREEN: 3&gt;</span>
  903. </pre></div>
  904. </div>
  905. <p>If any integer operation is performed with an <em>IntFlag</em> member, the result is
  906. not an <em>IntFlag</em>:</p>
  907. <div class="highlight-python3 notranslate"><div class="highlight"><pre><span></span><span class="gp">&gt;&gt;&gt; </span><span class="n">Color</span><span class="o">.</span><span class="n">RED</span> <span class="o">+</span> <span class="mi">2</span>
  908. <span class="go">3</span>
  909. </pre></div>
  910. </div>
  911. <p>If a <em>Flag</em> operation is performed with an <em>IntFlag</em> member and:</p>
  912. <ul class="simple">
  913. <li><p>the result is a valid <em>IntFlag</em>: an <em>IntFlag</em> is returned</p></li>
  914. <li><p>the result is not a valid <em>IntFlag</em>: the result depends on the <em>FlagBoundary</em> setting</p></li>
  915. </ul>
  916. <p>The <em>repr()</em> of unnamed zero-valued flags has changed. It is now:</p>
  917. <div class="doctest highlight-default notranslate"><div class="highlight"><pre><span></span><span class="gp">&gt;&gt;&gt; </span><span class="n">Color</span><span class="p">(</span><span class="mi">0</span><span class="p">)</span>
  918. <span class="go">&lt;Color: 0&gt;</span>
  919. </pre></div>
  920. </div>
  921. <div class="admonition note">
  922. <p class="admonition-title">Note</p>
  923. <p>Using <a class="reference internal" href="#enum.auto" title="enum.auto"><code class="xref py py-class docutils literal notranslate"><span class="pre">auto</span></code></a> with <a class="reference internal" href="#enum.IntFlag" title="enum.IntFlag"><code class="xref py py-class docutils literal notranslate"><span class="pre">IntFlag</span></code></a> results in integers that are powers
  924. of two, starting with <code class="docutils literal notranslate"><span class="pre">1</span></code>.</p>
  925. </div>
  926. <div class="versionchanged">
  927. <p><span class="versionmodified changed">Changed in version 3.11: </span><a class="reference internal" href="../reference/datamodel.html#object.__str__" title="object.__str__"><code class="xref py py-meth docutils literal notranslate"><span class="pre">__str__()</span></code></a> is now <code class="xref py py-meth docutils literal notranslate"><span class="pre">int.__str__()</span></code> to better support the
  928. <em>replacement of existing constants</em> use-case. <a class="reference internal" href="../reference/datamodel.html#object.__format__" title="object.__format__"><code class="xref py py-meth docutils literal notranslate"><span class="pre">__format__()</span></code></a> was
  929. already <code class="xref py py-meth docutils literal notranslate"><span class="pre">int.__format__()</span></code> for that same reason.</p>
  930. <p>Inversion of an <code class="xref py py-class docutils literal notranslate"><span class="pre">IntFlag</span></code> now returns a positive value that is the
  931. union of all flags not in the given flag, rather than a negative value.
  932. This matches the existing <a class="reference internal" href="#enum.Flag" title="enum.Flag"><code class="xref py py-class docutils literal notranslate"><span class="pre">Flag</span></code></a> behavior.</p>
  933. </div>
  934. </dd></dl>
  935. <dl class="py class">
  936. <dt class="sig sig-object py" id="enum.ReprEnum">
  937. <em class="property"><span class="pre">class</span><span class="w"> </span></em><span class="sig-prename descclassname"><span class="pre">enum.</span></span><span class="sig-name descname"><span class="pre">ReprEnum</span></span><a class="headerlink" href="#enum.ReprEnum" title="Link to this definition">¶</a></dt>
  938. <dd><p><code class="xref py py-class docutils literal notranslate"><span class="pre">ReprEnum</span></code> uses the <a class="reference internal" href="#enum.Enum.__repr__" title="enum.Enum.__repr__"><code class="xref py py-meth docutils literal notranslate"><span class="pre">repr()</span></code></a> of <a class="reference internal" href="#enum.Enum" title="enum.Enum"><code class="xref py py-class docutils literal notranslate"><span class="pre">Enum</span></code></a>,
  939. but the <a class="reference internal" href="stdtypes.html#str" title="str"><code class="xref py py-class docutils literal notranslate"><span class="pre">str()</span></code></a> of the mixed-in data type:</p>
  940. <ul class="simple">
  941. <li><p><code class="xref py py-meth docutils literal notranslate"><span class="pre">int.__str__()</span></code> for <a class="reference internal" href="#enum.IntEnum" title="enum.IntEnum"><code class="xref py py-class docutils literal notranslate"><span class="pre">IntEnum</span></code></a> and <a class="reference internal" href="#enum.IntFlag" title="enum.IntFlag"><code class="xref py py-class docutils literal notranslate"><span class="pre">IntFlag</span></code></a></p></li>
  942. <li><p><code class="xref py py-meth docutils literal notranslate"><span class="pre">str.__str__()</span></code> for <a class="reference internal" href="#enum.StrEnum" title="enum.StrEnum"><code class="xref py py-class docutils literal notranslate"><span class="pre">StrEnum</span></code></a></p></li>
  943. </ul>
  944. <p>Inherit from <code class="xref py py-class docutils literal notranslate"><span class="pre">ReprEnum</span></code> to keep the <a class="reference internal" href="stdtypes.html#str" title="str"><code class="xref py py-class docutils literal notranslate"><span class="pre">str()</span></code></a> / <a class="reference internal" href="functions.html#format" title="format"><code class="xref py py-func docutils literal notranslate"><span class="pre">format()</span></code></a>
  945. of the mixed-in data type instead of using the
  946. <a class="reference internal" href="#enum.Enum" title="enum.Enum"><code class="xref py py-class docutils literal notranslate"><span class="pre">Enum</span></code></a>-default <a class="reference internal" href="#enum.Enum.__str__" title="enum.Enum.__str__"><code class="xref py py-meth docutils literal notranslate"><span class="pre">str()</span></code></a>.</p>
  947. <div class="versionadded">
  948. <p><span class="versionmodified added">New in version 3.11.</span></p>
  949. </div>
  950. </dd></dl>
  951. <dl class="py class">
  952. <dt class="sig sig-object py" id="enum.EnumCheck">
  953. <em class="property"><span class="pre">class</span><span class="w"> </span></em><span class="sig-prename descclassname"><span class="pre">enum.</span></span><span class="sig-name descname"><span class="pre">EnumCheck</span></span><a class="headerlink" href="#enum.EnumCheck" title="Link to this definition">¶</a></dt>
  954. <dd><p><em>EnumCheck</em> contains the options used by the <a class="reference internal" href="#enum.verify" title="enum.verify"><code class="xref py py-func docutils literal notranslate"><span class="pre">verify()</span></code></a> decorator to ensure
  955. various constraints; failed constraints result in a <a class="reference internal" href="exceptions.html#ValueError" title="ValueError"><code class="xref py py-exc docutils literal notranslate"><span class="pre">ValueError</span></code></a>.</p>
  956. <dl class="py attribute">
  957. <dt class="sig sig-object py" id="enum.EnumCheck.UNIQUE">
  958. <span class="sig-name descname"><span class="pre">UNIQUE</span></span><a class="headerlink" href="#enum.EnumCheck.UNIQUE" title="Link to this definition">¶</a></dt>
  959. <dd><p>Ensure that each value has only one name:</p>
  960. <div class="highlight-python3 notranslate"><div class="highlight"><pre><span></span><span class="gp">&gt;&gt;&gt; </span><span class="kn">from</span> <span class="nn">enum</span> <span class="kn">import</span> <span class="n">Enum</span><span class="p">,</span> <span class="n">verify</span><span class="p">,</span> <span class="n">UNIQUE</span>
  961. <span class="gp">&gt;&gt;&gt; </span><span class="nd">@verify</span><span class="p">(</span><span class="n">UNIQUE</span><span class="p">)</span>
  962. <span class="gp">... </span><span class="k">class</span> <span class="nc">Color</span><span class="p">(</span><span class="n">Enum</span><span class="p">):</span>
  963. <span class="gp">... </span> <span class="n">RED</span> <span class="o">=</span> <span class="mi">1</span>
  964. <span class="gp">... </span> <span class="n">GREEN</span> <span class="o">=</span> <span class="mi">2</span>
  965. <span class="gp">... </span> <span class="n">BLUE</span> <span class="o">=</span> <span class="mi">3</span>
  966. <span class="gp">... </span> <span class="n">CRIMSON</span> <span class="o">=</span> <span class="mi">1</span>
  967. <span class="gt">Traceback (most recent call last):</span>
  968. <span class="c">...</span>
  969. <span class="gr">ValueError</span>: <span class="n">aliases found in &lt;enum &#39;Color&#39;&gt;: CRIMSON -&gt; RED</span>
  970. </pre></div>
  971. </div>
  972. </dd></dl>
  973. <dl class="py attribute">
  974. <dt class="sig sig-object py" id="enum.EnumCheck.CONTINUOUS">
  975. <span class="sig-name descname"><span class="pre">CONTINUOUS</span></span><a class="headerlink" href="#enum.EnumCheck.CONTINUOUS" title="Link to this definition">¶</a></dt>
  976. <dd><p>Ensure that there are no missing values between the lowest-valued member
  977. and the highest-valued member:</p>
  978. <div class="highlight-python3 notranslate"><div class="highlight"><pre><span></span><span class="gp">&gt;&gt;&gt; </span><span class="kn">from</span> <span class="nn">enum</span> <span class="kn">import</span> <span class="n">Enum</span><span class="p">,</span> <span class="n">verify</span><span class="p">,</span> <span class="n">CONTINUOUS</span>
  979. <span class="gp">&gt;&gt;&gt; </span><span class="nd">@verify</span><span class="p">(</span><span class="n">CONTINUOUS</span><span class="p">)</span>
  980. <span class="gp">... </span><span class="k">class</span> <span class="nc">Color</span><span class="p">(</span><span class="n">Enum</span><span class="p">):</span>
  981. <span class="gp">... </span> <span class="n">RED</span> <span class="o">=</span> <span class="mi">1</span>
  982. <span class="gp">... </span> <span class="n">GREEN</span> <span class="o">=</span> <span class="mi">2</span>
  983. <span class="gp">... </span> <span class="n">BLUE</span> <span class="o">=</span> <span class="mi">5</span>
  984. <span class="gt">Traceback (most recent call last):</span>
  985. <span class="c">...</span>
  986. <span class="gr">ValueError</span>: <span class="n">invalid enum &#39;Color&#39;: missing values 3, 4</span>
  987. </pre></div>
  988. </div>
  989. </dd></dl>
  990. <dl class="py attribute">
  991. <dt class="sig sig-object py" id="enum.EnumCheck.NAMED_FLAGS">
  992. <span class="sig-name descname"><span class="pre">NAMED_FLAGS</span></span><a class="headerlink" href="#enum.EnumCheck.NAMED_FLAGS" title="Link to this definition">¶</a></dt>
  993. <dd><p>Ensure that any flag groups/masks contain only named flags – useful when
  994. values are specified instead of being generated by <a class="reference internal" href="#enum.auto" title="enum.auto"><code class="xref py py-func docutils literal notranslate"><span class="pre">auto()</span></code></a>:</p>
  995. <div class="highlight-python3 notranslate"><div class="highlight"><pre><span></span><span class="gp">&gt;&gt;&gt; </span><span class="kn">from</span> <span class="nn">enum</span> <span class="kn">import</span> <span class="n">Flag</span><span class="p">,</span> <span class="n">verify</span><span class="p">,</span> <span class="n">NAMED_FLAGS</span>
  996. <span class="gp">&gt;&gt;&gt; </span><span class="nd">@verify</span><span class="p">(</span><span class="n">NAMED_FLAGS</span><span class="p">)</span>
  997. <span class="gp">... </span><span class="k">class</span> <span class="nc">Color</span><span class="p">(</span><span class="n">Flag</span><span class="p">):</span>
  998. <span class="gp">... </span> <span class="n">RED</span> <span class="o">=</span> <span class="mi">1</span>
  999. <span class="gp">... </span> <span class="n">GREEN</span> <span class="o">=</span> <span class="mi">2</span>
  1000. <span class="gp">... </span> <span class="n">BLUE</span> <span class="o">=</span> <span class="mi">4</span>
  1001. <span class="gp">... </span> <span class="n">WHITE</span> <span class="o">=</span> <span class="mi">15</span>
  1002. <span class="gp">... </span> <span class="n">NEON</span> <span class="o">=</span> <span class="mi">31</span>
  1003. <span class="gt">Traceback (most recent call last):</span>
  1004. <span class="c">...</span>
  1005. <span class="gr">ValueError</span>: <span class="n">invalid Flag &#39;Color&#39;: aliases WHITE and NEON are missing combined values of 0x18 [use enum.show_flag_values(value) for details]</span>
  1006. </pre></div>
  1007. </div>
  1008. </dd></dl>
  1009. <div class="admonition note">
  1010. <p class="admonition-title">Note</p>
  1011. <p>CONTINUOUS and NAMED_FLAGS are designed to work with integer-valued members.</p>
  1012. </div>
  1013. <div class="versionadded">
  1014. <p><span class="versionmodified added">New in version 3.11.</span></p>
  1015. </div>
  1016. </dd></dl>
  1017. <dl class="py class">
  1018. <dt class="sig sig-object py" id="enum.FlagBoundary">
  1019. <em class="property"><span class="pre">class</span><span class="w"> </span></em><span class="sig-prename descclassname"><span class="pre">enum.</span></span><span class="sig-name descname"><span class="pre">FlagBoundary</span></span><a class="headerlink" href="#enum.FlagBoundary" title="Link to this definition">¶</a></dt>
  1020. <dd><p><em>FlagBoundary</em> controls how out-of-range values are handled in <em>Flag</em> and its
  1021. subclasses.</p>
  1022. <dl class="py attribute">
  1023. <dt class="sig sig-object py" id="enum.FlagBoundary.STRICT">
  1024. <span class="sig-name descname"><span class="pre">STRICT</span></span><a class="headerlink" href="#enum.FlagBoundary.STRICT" title="Link to this definition">¶</a></dt>
  1025. <dd><p>Out-of-range values cause a <a class="reference internal" href="exceptions.html#ValueError" title="ValueError"><code class="xref py py-exc docutils literal notranslate"><span class="pre">ValueError</span></code></a> to be raised. This is the
  1026. default for <a class="reference internal" href="#enum.Flag" title="enum.Flag"><code class="xref py py-class docutils literal notranslate"><span class="pre">Flag</span></code></a>:</p>
  1027. <div class="highlight-python3 notranslate"><div class="highlight"><pre><span></span><span class="gp">&gt;&gt;&gt; </span><span class="kn">from</span> <span class="nn">enum</span> <span class="kn">import</span> <span class="n">Flag</span><span class="p">,</span> <span class="n">STRICT</span><span class="p">,</span> <span class="n">auto</span>
  1028. <span class="gp">&gt;&gt;&gt; </span><span class="k">class</span> <span class="nc">StrictFlag</span><span class="p">(</span><span class="n">Flag</span><span class="p">,</span> <span class="n">boundary</span><span class="o">=</span><span class="n">STRICT</span><span class="p">):</span>
  1029. <span class="gp">... </span> <span class="n">RED</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
  1030. <span class="gp">... </span> <span class="n">GREEN</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
  1031. <span class="gp">... </span> <span class="n">BLUE</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
  1032. <span class="gp">...</span>
  1033. <span class="gp">&gt;&gt;&gt; </span><span class="n">StrictFlag</span><span class="p">(</span><span class="mi">2</span><span class="o">**</span><span class="mi">2</span> <span class="o">+</span> <span class="mi">2</span><span class="o">**</span><span class="mi">4</span><span class="p">)</span>
  1034. <span class="gt">Traceback (most recent call last):</span>
  1035. <span class="c">...</span>
  1036. <span class="gr">ValueError</span>: <span class="n">&lt;flag &#39;StrictFlag&#39;&gt; invalid value 20</span>
  1037. <span class="x"> given 0b0 10100</span>
  1038. <span class="x"> allowed 0b0 00111</span>
  1039. </pre></div>
  1040. </div>
  1041. </dd></dl>
  1042. <dl class="py attribute">
  1043. <dt class="sig sig-object py" id="enum.FlagBoundary.CONFORM">
  1044. <span class="sig-name descname"><span class="pre">CONFORM</span></span><a class="headerlink" href="#enum.FlagBoundary.CONFORM" title="Link to this definition">¶</a></dt>
  1045. <dd><p>Out-of-range values have invalid values removed, leaving a valid <em>Flag</em>
  1046. value:</p>
  1047. <div class="highlight-python3 notranslate"><div class="highlight"><pre><span></span><span class="gp">&gt;&gt;&gt; </span><span class="kn">from</span> <span class="nn">enum</span> <span class="kn">import</span> <span class="n">Flag</span><span class="p">,</span> <span class="n">CONFORM</span><span class="p">,</span> <span class="n">auto</span>
  1048. <span class="gp">&gt;&gt;&gt; </span><span class="k">class</span> <span class="nc">ConformFlag</span><span class="p">(</span><span class="n">Flag</span><span class="p">,</span> <span class="n">boundary</span><span class="o">=</span><span class="n">CONFORM</span><span class="p">):</span>
  1049. <span class="gp">... </span> <span class="n">RED</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
  1050. <span class="gp">... </span> <span class="n">GREEN</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
  1051. <span class="gp">... </span> <span class="n">BLUE</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
  1052. <span class="gp">...</span>
  1053. <span class="gp">&gt;&gt;&gt; </span><span class="n">ConformFlag</span><span class="p">(</span><span class="mi">2</span><span class="o">**</span><span class="mi">2</span> <span class="o">+</span> <span class="mi">2</span><span class="o">**</span><span class="mi">4</span><span class="p">)</span>
  1054. <span class="go">&lt;ConformFlag.BLUE: 4&gt;</span>
  1055. </pre></div>
  1056. </div>
  1057. </dd></dl>
  1058. <dl class="py attribute">
  1059. <dt class="sig sig-object py" id="enum.FlagBoundary.EJECT">
  1060. <span class="sig-name descname"><span class="pre">EJECT</span></span><a class="headerlink" href="#enum.FlagBoundary.EJECT" title="Link to this definition">¶</a></dt>
  1061. <dd><p>Out-of-range values lose their <em>Flag</em> membership and revert to <a class="reference internal" href="functions.html#int" title="int"><code class="xref py py-class docutils literal notranslate"><span class="pre">int</span></code></a>.</p>
  1062. <div class="doctest highlight-default notranslate"><div class="highlight"><pre><span></span><span class="gp">&gt;&gt;&gt; </span><span class="kn">from</span> <span class="nn">enum</span> <span class="kn">import</span> <span class="n">Flag</span><span class="p">,</span> <span class="n">EJECT</span><span class="p">,</span> <span class="n">auto</span>
  1063. <span class="gp">&gt;&gt;&gt; </span><span class="k">class</span> <span class="nc">EjectFlag</span><span class="p">(</span><span class="n">Flag</span><span class="p">,</span> <span class="n">boundary</span><span class="o">=</span><span class="n">EJECT</span><span class="p">):</span>
  1064. <span class="gp">... </span> <span class="n">RED</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
  1065. <span class="gp">... </span> <span class="n">GREEN</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
  1066. <span class="gp">... </span> <span class="n">BLUE</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
  1067. <span class="gp">...</span>
  1068. <span class="gp">&gt;&gt;&gt; </span><span class="n">EjectFlag</span><span class="p">(</span><span class="mi">2</span><span class="o">**</span><span class="mi">2</span> <span class="o">+</span> <span class="mi">2</span><span class="o">**</span><span class="mi">4</span><span class="p">)</span>
  1069. <span class="go">20</span>
  1070. </pre></div>
  1071. </div>
  1072. </dd></dl>
  1073. <dl class="py attribute">
  1074. <dt class="sig sig-object py" id="enum.FlagBoundary.KEEP">
  1075. <span class="sig-name descname"><span class="pre">KEEP</span></span><a class="headerlink" href="#enum.FlagBoundary.KEEP" title="Link to this definition">¶</a></dt>
  1076. <dd><p>Out-of-range values are kept, and the <em>Flag</em> membership is kept.
  1077. This is the default for <a class="reference internal" href="#enum.IntFlag" title="enum.IntFlag"><code class="xref py py-class docutils literal notranslate"><span class="pre">IntFlag</span></code></a>:</p>
  1078. <div class="highlight-python3 notranslate"><div class="highlight"><pre><span></span><span class="gp">&gt;&gt;&gt; </span><span class="kn">from</span> <span class="nn">enum</span> <span class="kn">import</span> <span class="n">Flag</span><span class="p">,</span> <span class="n">KEEP</span><span class="p">,</span> <span class="n">auto</span>
  1079. <span class="gp">&gt;&gt;&gt; </span><span class="k">class</span> <span class="nc">KeepFlag</span><span class="p">(</span><span class="n">Flag</span><span class="p">,</span> <span class="n">boundary</span><span class="o">=</span><span class="n">KEEP</span><span class="p">):</span>
  1080. <span class="gp">... </span> <span class="n">RED</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
  1081. <span class="gp">... </span> <span class="n">GREEN</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
  1082. <span class="gp">... </span> <span class="n">BLUE</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
  1083. <span class="gp">...</span>
  1084. <span class="gp">&gt;&gt;&gt; </span><span class="n">KeepFlag</span><span class="p">(</span><span class="mi">2</span><span class="o">**</span><span class="mi">2</span> <span class="o">+</span> <span class="mi">2</span><span class="o">**</span><span class="mi">4</span><span class="p">)</span>
  1085. <span class="go">&lt;KeepFlag.BLUE|16: 20&gt;</span>
  1086. </pre></div>
  1087. </div>
  1088. </dd></dl>
  1089. </dd></dl>
  1090. <div class="versionadded">
  1091. <p><span class="versionmodified added">New in version 3.11.</span></p>
  1092. </div>
  1093. <hr class="docutils" />
  1094. <section id="supported-dunder-names">
  1095. <h3>Supported <code class="docutils literal notranslate"><span class="pre">__dunder__</span></code> names<a class="headerlink" href="#supported-dunder-names" title="Link to this heading">¶</a></h3>
  1096. <p><a class="reference internal" href="#enum.EnumType.__members__" title="enum.EnumType.__members__"><code class="xref py py-attr docutils literal notranslate"><span class="pre">__members__</span></code></a> is a read-only ordered mapping of <code class="docutils literal notranslate"><span class="pre">member_name</span></code>:<code class="docutils literal notranslate"><span class="pre">member</span></code>
  1097. items. It is only available on the class.</p>
  1098. <p><a class="reference internal" href="../reference/datamodel.html#object.__new__" title="object.__new__"><code class="xref py py-meth docutils literal notranslate"><span class="pre">__new__()</span></code></a>, if specified, must create and return the enum members; it is
  1099. also a very good idea to set the member’s <code class="xref py py-attr docutils literal notranslate"><span class="pre">_value_</span></code> appropriately. Once
  1100. all the members are created it is no longer used.</p>
  1101. </section>
  1102. <section id="supported-sunder-names">
  1103. <h3>Supported <code class="docutils literal notranslate"><span class="pre">_sunder_</span></code> names<a class="headerlink" href="#supported-sunder-names" title="Link to this heading">¶</a></h3>
  1104. <ul>
  1105. <li><p><a class="reference internal" href="#enum.Enum._name_" title="enum.Enum._name_"><code class="xref py py-attr docutils literal notranslate"><span class="pre">_name_</span></code></a> – name of the member</p></li>
  1106. <li><p><a class="reference internal" href="#enum.Enum._value_" title="enum.Enum._value_"><code class="xref py py-attr docutils literal notranslate"><span class="pre">_value_</span></code></a> – value of the member; can be set in <code class="docutils literal notranslate"><span class="pre">__new__</span></code></p></li>
  1107. <li><p><a class="reference internal" href="#enum.Enum._missing_" title="enum.Enum._missing_"><code class="xref py py-meth docutils literal notranslate"><span class="pre">_missing_()</span></code></a> – a lookup function used when a value is not found;
  1108. may be overridden</p></li>
  1109. <li><p><a class="reference internal" href="#enum.Enum._ignore_" title="enum.Enum._ignore_"><code class="xref py py-attr docutils literal notranslate"><span class="pre">_ignore_</span></code></a> – a list of names, either as a <a class="reference internal" href="stdtypes.html#list" title="list"><code class="xref py py-class docutils literal notranslate"><span class="pre">list</span></code></a> or a
  1110. <a class="reference internal" href="stdtypes.html#str" title="str"><code class="xref py py-class docutils literal notranslate"><span class="pre">str</span></code></a>, that will not be transformed into members, and will be removed
  1111. from the final class</p></li>
  1112. <li><p><a class="reference internal" href="#enum.Enum._order_" title="enum.Enum._order_"><code class="xref py py-attr docutils literal notranslate"><span class="pre">_order_</span></code></a> – no longer used, kept for backward
  1113. compatibility (class attribute, removed during class creation)</p></li>
  1114. <li><p><a class="reference internal" href="#enum.Enum._generate_next_value_" title="enum.Enum._generate_next_value_"><code class="xref py py-meth docutils literal notranslate"><span class="pre">_generate_next_value_()</span></code></a> – used to get an appropriate value for
  1115. an enum member; may be overridden</p>
  1116. <div class="admonition note">
  1117. <p class="admonition-title">Note</p>
  1118. <p>For standard <a class="reference internal" href="#enum.Enum" title="enum.Enum"><code class="xref py py-class docutils literal notranslate"><span class="pre">Enum</span></code></a> classes the next value chosen is the last value seen
  1119. incremented by one.</p>
  1120. <p>For <a class="reference internal" href="#enum.Flag" title="enum.Flag"><code class="xref py py-class docutils literal notranslate"><span class="pre">Flag</span></code></a> classes the next value chosen will be the next highest
  1121. power-of-two, regardless of the last value seen.</p>
  1122. </div>
  1123. </li>
  1124. </ul>
  1125. <div class="versionadded">
  1126. <p><span class="versionmodified added">New in version 3.6: </span><code class="docutils literal notranslate"><span class="pre">_missing_</span></code>, <code class="docutils literal notranslate"><span class="pre">_order_</span></code>, <code class="docutils literal notranslate"><span class="pre">_generate_next_value_</span></code></p>
  1127. </div>
  1128. <div class="versionadded">
  1129. <p><span class="versionmodified added">New in version 3.7: </span><code class="docutils literal notranslate"><span class="pre">_ignore_</span></code></p>
  1130. </div>
  1131. </section>
  1132. </section>
  1133. <hr class="docutils" />
  1134. <section id="utilities-and-decorators">
  1135. <h2>Utilities and Decorators<a class="headerlink" href="#utilities-and-decorators" title="Link to this heading">¶</a></h2>
  1136. <dl class="py class">
  1137. <dt class="sig sig-object py" id="enum.auto">
  1138. <em class="property"><span class="pre">class</span><span class="w"> </span></em><span class="sig-prename descclassname"><span class="pre">enum.</span></span><span class="sig-name descname"><span class="pre">auto</span></span><a class="headerlink" href="#enum.auto" title="Link to this definition">¶</a></dt>
  1139. <dd><p><em>auto</em> can be used in place of a value. If used, the <em>Enum</em> machinery will
  1140. call an <em>Enum</em>’s <a class="reference internal" href="#enum.Enum._generate_next_value_" title="enum.Enum._generate_next_value_"><code class="xref py py-meth docutils literal notranslate"><span class="pre">_generate_next_value_()</span></code></a> to get an appropriate value.
  1141. For <em>Enum</em> and <em>IntEnum</em> that appropriate value will be the last value plus
  1142. one; for <em>Flag</em> and <em>IntFlag</em> it will be the first power-of-two greater
  1143. than the highest value; for <em>StrEnum</em> it will be the lower-cased version of
  1144. the member’s name. Care must be taken if mixing <em>auto()</em> with manually
  1145. specified values.</p>
  1146. <p><em>auto</em> instances are only resolved when at the top level of an assignment:</p>
  1147. <ul class="simple">
  1148. <li><p><code class="docutils literal notranslate"><span class="pre">FIRST</span> <span class="pre">=</span> <span class="pre">auto()</span></code> will work (auto() is replaced with <code class="docutils literal notranslate"><span class="pre">1</span></code>);</p></li>
  1149. <li><p><code class="docutils literal notranslate"><span class="pre">SECOND</span> <span class="pre">=</span> <span class="pre">auto(),</span> <span class="pre">-2</span></code> will work (auto is replaced with <code class="docutils literal notranslate"><span class="pre">2</span></code>, so <code class="docutils literal notranslate"><span class="pre">2,</span> <span class="pre">-2</span></code> is
  1150. used to create the <code class="docutils literal notranslate"><span class="pre">SECOND</span></code> enum member;</p></li>
  1151. <li><p><code class="docutils literal notranslate"><span class="pre">THREE</span> <span class="pre">=</span> <span class="pre">[auto(),</span> <span class="pre">-3]</span></code> will <em>not</em> work (<code class="docutils literal notranslate"><span class="pre">&lt;auto</span> <span class="pre">instance&gt;,</span> <span class="pre">-3</span></code> is used to
  1152. create the <code class="docutils literal notranslate"><span class="pre">THREE</span></code> enum member)</p></li>
  1153. </ul>
  1154. <div class="versionchanged">
  1155. <p><span class="versionmodified changed">Changed in version 3.11.1: </span>In prior versions, <code class="docutils literal notranslate"><span class="pre">auto()</span></code> had to be the only thing
  1156. on the assignment line to work properly.</p>
  1157. </div>
  1158. <p><code class="docutils literal notranslate"><span class="pre">_generate_next_value_</span></code> can be overridden to customize the values used by
  1159. <em>auto</em>.</p>
  1160. <div class="admonition note">
  1161. <p class="admonition-title">Note</p>
  1162. <p>in 3.13 the default <code class="docutils literal notranslate"><span class="pre">_generate_next_value_</span></code> will always return
  1163. the highest member value incremented by 1, and will fail if any
  1164. member is an incompatible type.</p>
  1165. </div>
  1166. </dd></dl>
  1167. <dl class="py function">
  1168. <dt class="sig sig-object py" id="enum.property">
  1169. <span class="sig-prename descclassname"><span class="pre">&#64;</span></span><span class="sig-prename descclassname"><span class="pre">enum.</span></span><span class="sig-name descname"><span class="pre">property</span></span><a class="headerlink" href="#enum.property" title="Link to this definition">¶</a></dt>
  1170. <dd><p>A decorator similar to the built-in <em>property</em>, but specifically for
  1171. enumerations. It allows member attributes to have the same names as members
  1172. themselves.</p>
  1173. <div class="admonition note">
  1174. <p class="admonition-title">Note</p>
  1175. <p>the <em>property</em> and the member must be defined in separate classes;
  1176. for example, the <em>value</em> and <em>name</em> attributes are defined in the
  1177. <em>Enum</em> class, and <em>Enum</em> subclasses can define members with the
  1178. names <code class="docutils literal notranslate"><span class="pre">value</span></code> and <code class="docutils literal notranslate"><span class="pre">name</span></code>.</p>
  1179. </div>
  1180. <div class="versionadded">
  1181. <p><span class="versionmodified added">New in version 3.11.</span></p>
  1182. </div>
  1183. </dd></dl>
  1184. <dl class="py function">
  1185. <dt class="sig sig-object py" id="enum.unique">
  1186. <span class="sig-prename descclassname"><span class="pre">&#64;</span></span><span class="sig-prename descclassname"><span class="pre">enum.</span></span><span class="sig-name descname"><span class="pre">unique</span></span><a class="headerlink" href="#enum.unique" title="Link to this definition">¶</a></dt>
  1187. <dd><p>A <a class="reference internal" href="../reference/compound_stmts.html#class"><code class="xref std std-keyword docutils literal notranslate"><span class="pre">class</span></code></a> decorator specifically for enumerations. It searches an
  1188. enumeration’s <a class="reference internal" href="#enum.EnumType.__members__" title="enum.EnumType.__members__"><code class="xref py py-attr docutils literal notranslate"><span class="pre">__members__</span></code></a>, gathering any aliases it finds; if any are
  1189. found <a class="reference internal" href="exceptions.html#ValueError" title="ValueError"><code class="xref py py-exc docutils literal notranslate"><span class="pre">ValueError</span></code></a> is raised with the details:</p>
  1190. <div class="highlight-python3 notranslate"><div class="highlight"><pre><span></span><span class="gp">&gt;&gt;&gt; </span><span class="kn">from</span> <span class="nn">enum</span> <span class="kn">import</span> <span class="n">Enum</span><span class="p">,</span> <span class="n">unique</span>
  1191. <span class="gp">&gt;&gt;&gt; </span><span class="nd">@unique</span>
  1192. <span class="gp">... </span><span class="k">class</span> <span class="nc">Mistake</span><span class="p">(</span><span class="n">Enum</span><span class="p">):</span>
  1193. <span class="gp">... </span> <span class="n">ONE</span> <span class="o">=</span> <span class="mi">1</span>
  1194. <span class="gp">... </span> <span class="n">TWO</span> <span class="o">=</span> <span class="mi">2</span>
  1195. <span class="gp">... </span> <span class="n">THREE</span> <span class="o">=</span> <span class="mi">3</span>
  1196. <span class="gp">... </span> <span class="n">FOUR</span> <span class="o">=</span> <span class="mi">3</span>
  1197. <span class="gp">...</span>
  1198. <span class="gt">Traceback (most recent call last):</span>
  1199. <span class="c">...</span>
  1200. <span class="gr">ValueError</span>: <span class="n">duplicate values found in &lt;enum &#39;Mistake&#39;&gt;: FOUR -&gt; THREE</span>
  1201. </pre></div>
  1202. </div>
  1203. </dd></dl>
  1204. <dl class="py function">
  1205. <dt class="sig sig-object py" id="enum.verify">
  1206. <span class="sig-prename descclassname"><span class="pre">&#64;</span></span><span class="sig-prename descclassname"><span class="pre">enum.</span></span><span class="sig-name descname"><span class="pre">verify</span></span><a class="headerlink" href="#enum.verify" title="Link to this definition">¶</a></dt>
  1207. <dd><p>A <a class="reference internal" href="../reference/compound_stmts.html#class"><code class="xref std std-keyword docutils literal notranslate"><span class="pre">class</span></code></a> decorator specifically for enumerations. Members from
  1208. <a class="reference internal" href="#enum.EnumCheck" title="enum.EnumCheck"><code class="xref py py-class docutils literal notranslate"><span class="pre">EnumCheck</span></code></a> are used to specify which constraints should be checked
  1209. on the decorated enumeration.</p>
  1210. <div class="versionadded">
  1211. <p><span class="versionmodified added">New in version 3.11.</span></p>
  1212. </div>
  1213. </dd></dl>
  1214. <dl class="py function">
  1215. <dt class="sig sig-object py" id="enum.member">
  1216. <span class="sig-prename descclassname"><span class="pre">&#64;</span></span><span class="sig-prename descclassname"><span class="pre">enum.</span></span><span class="sig-name descname"><span class="pre">member</span></span><a class="headerlink" href="#enum.member" title="Link to this definition">¶</a></dt>
  1217. <dd><p>A decorator for use in enums: its target will become a member.</p>
  1218. <div class="versionadded">
  1219. <p><span class="versionmodified added">New in version 3.11.</span></p>
  1220. </div>
  1221. </dd></dl>
  1222. <dl class="py function">
  1223. <dt class="sig sig-object py" id="enum.nonmember">
  1224. <span class="sig-prename descclassname"><span class="pre">&#64;</span></span><span class="sig-prename descclassname"><span class="pre">enum.</span></span><span class="sig-name descname"><span class="pre">nonmember</span></span><a class="headerlink" href="#enum.nonmember" title="Link to this definition">¶</a></dt>
  1225. <dd><p>A decorator for use in enums: its target will not become a member.</p>
  1226. <div class="versionadded">
  1227. <p><span class="versionmodified added">New in version 3.11.</span></p>
  1228. </div>
  1229. </dd></dl>
  1230. <dl class="py function">
  1231. <dt class="sig sig-object py" id="enum.global_enum">
  1232. <span class="sig-prename descclassname"><span class="pre">&#64;</span></span><span class="sig-prename descclassname"><span class="pre">enum.</span></span><span class="sig-name descname"><span class="pre">global_enum</span></span><a class="headerlink" href="#enum.global_enum" title="Link to this definition">¶</a></dt>
  1233. <dd><p>A decorator to change the <a class="reference internal" href="stdtypes.html#str" title="str"><code class="xref py py-class docutils literal notranslate"><span class="pre">str()</span></code></a> and <a class="reference internal" href="functions.html#repr" title="repr"><code class="xref py py-func docutils literal notranslate"><span class="pre">repr()</span></code></a> of an enum
  1234. to show its members as belonging to the module instead of its class.
  1235. Should only be used when the enum members are exported
  1236. to the module global namespace (see <a class="reference internal" href="re.html#re.RegexFlag" title="re.RegexFlag"><code class="xref py py-class docutils literal notranslate"><span class="pre">re.RegexFlag</span></code></a> for an example).</p>
  1237. <div class="versionadded">
  1238. <p><span class="versionmodified added">New in version 3.11.</span></p>
  1239. </div>
  1240. </dd></dl>
  1241. <dl class="py function">
  1242. <dt class="sig sig-object py" id="enum.show_flag_values">
  1243. <span class="sig-prename descclassname"><span class="pre">enum.</span></span><span class="sig-name descname"><span class="pre">show_flag_values</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">value</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#enum.show_flag_values" title="Link to this definition">¶</a></dt>
  1244. <dd><p>Return a list of all power-of-two integers contained in a flag <em>value</em>.</p>
  1245. <div class="versionadded">
  1246. <p><span class="versionmodified added">New in version 3.11.</span></p>
  1247. </div>
  1248. </dd></dl>
  1249. </section>
  1250. <hr class="docutils" />
  1251. <section id="notes">
  1252. <h2>Notes<a class="headerlink" href="#notes" title="Link to this heading">¶</a></h2>
  1253. <p><a class="reference internal" href="#enum.IntEnum" title="enum.IntEnum"><code class="xref py py-class docutils literal notranslate"><span class="pre">IntEnum</span></code></a>, <a class="reference internal" href="#enum.StrEnum" title="enum.StrEnum"><code class="xref py py-class docutils literal notranslate"><span class="pre">StrEnum</span></code></a>, and <a class="reference internal" href="#enum.IntFlag" title="enum.IntFlag"><code class="xref py py-class docutils literal notranslate"><span class="pre">IntFlag</span></code></a></p>
  1254. <blockquote>
  1255. <div><p>These three enum types are designed to be drop-in replacements for existing
  1256. integer- and string-based values; as such, they have extra limitations:</p>
  1257. <ul class="simple">
  1258. <li><p><code class="docutils literal notranslate"><span class="pre">__str__</span></code> uses the value and not the name of the enum member</p></li>
  1259. <li><p><code class="docutils literal notranslate"><span class="pre">__format__</span></code>, because it uses <code class="docutils literal notranslate"><span class="pre">__str__</span></code>, will also use the value of
  1260. the enum member instead of its name</p></li>
  1261. </ul>
  1262. <p>If you do not need/want those limitations, you can either create your own
  1263. base class by mixing in the <code class="docutils literal notranslate"><span class="pre">int</span></code> or <code class="docutils literal notranslate"><span class="pre">str</span></code> type yourself:</p>
  1264. <div class="highlight-python3 notranslate"><div class="highlight"><pre><span></span><span class="gp">&gt;&gt;&gt; </span><span class="kn">from</span> <span class="nn">enum</span> <span class="kn">import</span> <span class="n">Enum</span>
  1265. <span class="gp">&gt;&gt;&gt; </span><span class="k">class</span> <span class="nc">MyIntEnum</span><span class="p">(</span><span class="nb">int</span><span class="p">,</span> <span class="n">Enum</span><span class="p">):</span>
  1266. <span class="gp">... </span> <span class="k">pass</span>
  1267. </pre></div>
  1268. </div>
  1269. <p>or you can reassign the appropriate <a class="reference internal" href="stdtypes.html#str" title="str"><code class="xref py py-meth docutils literal notranslate"><span class="pre">str()</span></code></a>, etc., in your enum:</p>
  1270. <div class="highlight-python3 notranslate"><div class="highlight"><pre><span></span><span class="gp">&gt;&gt;&gt; </span><span class="kn">from</span> <span class="nn">enum</span> <span class="kn">import</span> <span class="n">Enum</span><span class="p">,</span> <span class="n">IntEnum</span>
  1271. <span class="gp">&gt;&gt;&gt; </span><span class="k">class</span> <span class="nc">MyIntEnum</span><span class="p">(</span><span class="n">IntEnum</span><span class="p">):</span>
  1272. <span class="gp">... </span> <span class="fm">__str__</span> <span class="o">=</span> <span class="n">Enum</span><span class="o">.</span><span class="fm">__str__</span>
  1273. </pre></div>
  1274. </div>
  1275. </div></blockquote>
  1276. </section>
  1277. </section>
  1278. <div class="clearer"></div>
  1279. </div>
  1280. </div>
  1281. </div>
  1282. <div class="sphinxsidebar" role="navigation" aria-label="main navigation">
  1283. <div class="sphinxsidebarwrapper">
  1284. <div>
  1285. <h3><a href="../contents.html">Table of Contents</a></h3>
  1286. <ul>
  1287. <li><a class="reference internal" href="#"><code class="xref py py-mod docutils literal notranslate"><span class="pre">enum</span></code> — Support for enumerations</a><ul>
  1288. <li><a class="reference internal" href="#module-contents">Module Contents</a></li>
  1289. <li><a class="reference internal" href="#data-types">Data Types</a><ul>
  1290. <li><a class="reference internal" href="#supported-dunder-names">Supported <code class="docutils literal notranslate"><span class="pre">__dunder__</span></code> names</a></li>
  1291. <li><a class="reference internal" href="#supported-sunder-names">Supported <code class="docutils literal notranslate"><span class="pre">_sunder_</span></code> names</a></li>
  1292. </ul>
  1293. </li>
  1294. <li><a class="reference internal" href="#utilities-and-decorators">Utilities and Decorators</a></li>
  1295. <li><a class="reference internal" href="#notes">Notes</a></li>
  1296. </ul>
  1297. </li>
  1298. </ul>
  1299. </div>
  1300. <div>
  1301. <h4>Previous topic</h4>
  1302. <p class="topless"><a href="reprlib.html"
  1303. title="previous chapter"><code class="xref py py-mod docutils literal notranslate"><span class="pre">reprlib</span></code> — Alternate <code class="xref py py-func docutils literal notranslate"><span class="pre">repr()</span></code> implementation</a></p>
  1304. </div>
  1305. <div>
  1306. <h4>Next topic</h4>
  1307. <p class="topless"><a href="graphlib.html"
  1308. title="next chapter"><code class="xref py py-mod docutils literal notranslate"><span class="pre">graphlib</span></code> — Functionality to operate with graph-like structures</a></p>
  1309. </div>
  1310. <div role="note" aria-label="source link">
  1311. <h3>This Page</h3>
  1312. <ul class="this-page-menu">
  1313. <li><a href="../bugs.html">Report a Bug</a></li>
  1314. <li>
  1315. <a href="https://github.com/python/cpython/blob/main/Doc/library/enum.rst"
  1316. rel="nofollow">Show Source
  1317. </a>
  1318. </li>
  1319. </ul>
  1320. </div>
  1321. </div>
  1322. <div id="sidebarbutton" title="Collapse sidebar">
  1323. <span>«</span>
  1324. </div>
  1325. </div>
  1326. <div class="clearer"></div>
  1327. </div>
  1328. <div class="related" role="navigation" aria-label="related navigation">
  1329. <h3>Navigation</h3>
  1330. <ul>
  1331. <li class="right" style="margin-right: 10px">
  1332. <a href="../genindex.html" title="General Index"
  1333. >index</a></li>
  1334. <li class="right" >
  1335. <a href="../py-modindex.html" title="Python Module Index"
  1336. >modules</a> |</li>
  1337. <li class="right" >
  1338. <a href="graphlib.html" title="graphlib — Functionality to operate with graph-like structures"
  1339. >next</a> |</li>
  1340. <li class="right" >
  1341. <a href="reprlib.html" title="reprlib — Alternate repr() implementation"
  1342. >previous</a> |</li>
  1343. <li><img src="../_static/py.svg" alt="Python logo" style="vertical-align: middle; margin-top: -1px"/></li>
  1344. <li><a href="https://www.python.org/">Python</a> &#187;</li>
  1345. <li class="switchers">
  1346. <div class="language_switcher_placeholder"></div>
  1347. <div class="version_switcher_placeholder"></div>
  1348. </li>
  1349. <li>
  1350. </li>
  1351. <li id="cpython-language-and-version">
  1352. <a href="../index.html">3.12.3 Documentation</a> &#187;
  1353. </li>
  1354. <li class="nav-item nav-item-1"><a href="index.html" >The Python Standard Library</a> &#187;</li>
  1355. <li class="nav-item nav-item-2"><a href="datatypes.html" >Data Types</a> &#187;</li>
  1356. <li class="nav-item nav-item-this"><a href=""><code class="xref py py-mod docutils literal notranslate"><span class="pre">enum</span></code> — Support for enumerations</a></li>
  1357. <li class="right">
  1358. <div class="inline-search" role="search">
  1359. <form class="inline-search" action="../search.html" method="get">
  1360. <input placeholder="Quick search" aria-label="Quick search" type="search" name="q" id="search-box" />
  1361. <input type="submit" value="Go" />
  1362. </form>
  1363. </div>
  1364. |
  1365. </li>
  1366. <li class="right">
  1367. <label class="theme-selector-label">
  1368. Theme
  1369. <select class="theme-selector" oninput="activateTheme(this.value)">
  1370. <option value="auto" selected>Auto</option>
  1371. <option value="light">Light</option>
  1372. <option value="dark">Dark</option>
  1373. </select>
  1374. </label> |</li>
  1375. </ul>
  1376. </div>
  1377. <div class="footer">
  1378. &copy;
  1379. <a href="../copyright.html">
  1380. Copyright
  1381. </a>
  1382. 2001-2024, Python Software Foundation.
  1383. <br />
  1384. This page is licensed under the Python Software Foundation License Version 2.
  1385. <br />
  1386. Examples, recipes, and other code in the documentation are additionally licensed under the Zero Clause BSD License.
  1387. <br />
  1388. See <a href="/license.html">History and License</a> for more information.<br />
  1389. <br />
  1390. The Python Software Foundation is a non-profit corporation.
  1391. <a href="https://www.python.org/psf/donations/">Please donate.</a>
  1392. <br />
  1393. <br />
  1394. Last updated on Apr 09, 2024 (13:47 UTC).
  1395. <a href="/bugs.html">Found a bug</a>?
  1396. <br />
  1397. Created using <a href="https://www.sphinx-doc.org/">Sphinx</a> 7.2.6.
  1398. </div>
  1399. </body>
  1400. </html>
上海开阖软件有限公司 沪ICP备12045867号-1