17db96d56Sopenharmony_ci:mod:`enum` --- Support for enumerations 27db96d56Sopenharmony_ci======================================== 37db96d56Sopenharmony_ci 47db96d56Sopenharmony_ci.. module:: enum 57db96d56Sopenharmony_ci :synopsis: Implementation of an enumeration class. 67db96d56Sopenharmony_ci 77db96d56Sopenharmony_ci.. moduleauthor:: Ethan Furman <ethan@stoneleaf.us> 87db96d56Sopenharmony_ci.. sectionauthor:: Barry Warsaw <barry@python.org> 97db96d56Sopenharmony_ci.. sectionauthor:: Eli Bendersky <eliben@gmail.com> 107db96d56Sopenharmony_ci.. sectionauthor:: Ethan Furman <ethan@stoneleaf.us> 117db96d56Sopenharmony_ci 127db96d56Sopenharmony_ci.. versionadded:: 3.4 137db96d56Sopenharmony_ci 147db96d56Sopenharmony_ci**Source code:** :source:`Lib/enum.py` 157db96d56Sopenharmony_ci 167db96d56Sopenharmony_ci.. sidebar:: Important 177db96d56Sopenharmony_ci 187db96d56Sopenharmony_ci This page contains the API reference information. For tutorial 197db96d56Sopenharmony_ci information and discussion of more advanced topics, see 207db96d56Sopenharmony_ci 217db96d56Sopenharmony_ci * :ref:`Basic Tutorial <enum-basic-tutorial>` 227db96d56Sopenharmony_ci * :ref:`Advanced Tutorial <enum-advanced-tutorial>` 237db96d56Sopenharmony_ci * :ref:`Enum Cookbook <enum-cookbook>` 247db96d56Sopenharmony_ci 257db96d56Sopenharmony_ci--------------- 267db96d56Sopenharmony_ci 277db96d56Sopenharmony_ciAn enumeration: 287db96d56Sopenharmony_ci 297db96d56Sopenharmony_ci* is a set of symbolic names (members) bound to unique values 307db96d56Sopenharmony_ci* can be iterated over to return its canonical (i.e. non-alias) members in 317db96d56Sopenharmony_ci definition order 327db96d56Sopenharmony_ci* uses *call* syntax to return members by value 337db96d56Sopenharmony_ci* uses *index* syntax to return members by name 347db96d56Sopenharmony_ci 357db96d56Sopenharmony_ciEnumerations are created either by using :keyword:`class` syntax, or by 367db96d56Sopenharmony_ciusing function-call syntax:: 377db96d56Sopenharmony_ci 387db96d56Sopenharmony_ci >>> from enum import Enum 397db96d56Sopenharmony_ci 407db96d56Sopenharmony_ci >>> # class syntax 417db96d56Sopenharmony_ci >>> class Color(Enum): 427db96d56Sopenharmony_ci ... RED = 1 437db96d56Sopenharmony_ci ... GREEN = 2 447db96d56Sopenharmony_ci ... BLUE = 3 457db96d56Sopenharmony_ci 467db96d56Sopenharmony_ci >>> # functional syntax 477db96d56Sopenharmony_ci >>> Color = Enum('Color', ['RED', 'GREEN', 'BLUE']) 487db96d56Sopenharmony_ci 497db96d56Sopenharmony_ciEven though we can use :keyword:`class` syntax to create Enums, Enums 507db96d56Sopenharmony_ciare not normal Python classes. See 517db96d56Sopenharmony_ci:ref:`How are Enums different? <enum-class-differences>` for more details. 527db96d56Sopenharmony_ci 537db96d56Sopenharmony_ci.. note:: Nomenclature 547db96d56Sopenharmony_ci 557db96d56Sopenharmony_ci - The class :class:`!Color` is an *enumeration* (or *enum*) 567db96d56Sopenharmony_ci - The attributes :attr:`!Color.RED`, :attr:`!Color.GREEN`, etc., are 577db96d56Sopenharmony_ci *enumeration members* (or *members*) and are functionally constants. 587db96d56Sopenharmony_ci - The enum members have *names* and *values* (the name of 597db96d56Sopenharmony_ci :attr:`!Color.RED` is ``RED``, the value of :attr:`!Color.BLUE` is 607db96d56Sopenharmony_ci ``3``, etc.) 617db96d56Sopenharmony_ci 627db96d56Sopenharmony_ci--------------- 637db96d56Sopenharmony_ci 647db96d56Sopenharmony_ciModule Contents 657db96d56Sopenharmony_ci--------------- 667db96d56Sopenharmony_ci 677db96d56Sopenharmony_ci :class:`EnumType` 687db96d56Sopenharmony_ci 697db96d56Sopenharmony_ci The ``type`` for Enum and its subclasses. 707db96d56Sopenharmony_ci 717db96d56Sopenharmony_ci :class:`Enum` 727db96d56Sopenharmony_ci 737db96d56Sopenharmony_ci Base class for creating enumerated constants. 747db96d56Sopenharmony_ci 757db96d56Sopenharmony_ci :class:`IntEnum` 767db96d56Sopenharmony_ci 777db96d56Sopenharmony_ci Base class for creating enumerated constants that are also 787db96d56Sopenharmony_ci subclasses of :class:`int`. (`Notes`_) 797db96d56Sopenharmony_ci 807db96d56Sopenharmony_ci :class:`StrEnum` 817db96d56Sopenharmony_ci 827db96d56Sopenharmony_ci Base class for creating enumerated constants that are also 837db96d56Sopenharmony_ci subclasses of :class:`str`. (`Notes`_) 847db96d56Sopenharmony_ci 857db96d56Sopenharmony_ci :class:`Flag` 867db96d56Sopenharmony_ci 877db96d56Sopenharmony_ci Base class for creating enumerated constants that can be combined using 887db96d56Sopenharmony_ci the bitwise operations without losing their :class:`Flag` membership. 897db96d56Sopenharmony_ci 907db96d56Sopenharmony_ci :class:`IntFlag` 917db96d56Sopenharmony_ci 927db96d56Sopenharmony_ci Base class for creating enumerated constants that can be combined using 937db96d56Sopenharmony_ci the bitwise operators without losing their :class:`IntFlag` membership. 947db96d56Sopenharmony_ci :class:`IntFlag` members are also subclasses of :class:`int`. (`Notes`_) 957db96d56Sopenharmony_ci 967db96d56Sopenharmony_ci :class:`ReprEnum` 977db96d56Sopenharmony_ci 987db96d56Sopenharmony_ci Used by :class:`IntEnum`, :class:`StrEnum`, and :class:`IntFlag` 997db96d56Sopenharmony_ci to keep the :class:`str() <str>` of the mixed-in type. 1007db96d56Sopenharmony_ci 1017db96d56Sopenharmony_ci :class:`EnumCheck` 1027db96d56Sopenharmony_ci 1037db96d56Sopenharmony_ci An enumeration with the values ``CONTINUOUS``, ``NAMED_FLAGS``, and 1047db96d56Sopenharmony_ci ``UNIQUE``, for use with :func:`verify` to ensure various constraints 1057db96d56Sopenharmony_ci are met by a given enumeration. 1067db96d56Sopenharmony_ci 1077db96d56Sopenharmony_ci :class:`FlagBoundary` 1087db96d56Sopenharmony_ci 1097db96d56Sopenharmony_ci An enumeration with the values ``STRICT``, ``CONFORM``, ``EJECT``, and 1107db96d56Sopenharmony_ci ``KEEP`` which allows for more fine-grained control over how invalid values 1117db96d56Sopenharmony_ci are dealt with in an enumeration. 1127db96d56Sopenharmony_ci 1137db96d56Sopenharmony_ci :class:`auto` 1147db96d56Sopenharmony_ci 1157db96d56Sopenharmony_ci Instances are replaced with an appropriate value for Enum members. 1167db96d56Sopenharmony_ci :class:`StrEnum` defaults to the lower-cased version of the member name, 1177db96d56Sopenharmony_ci while other Enums default to 1 and increase from there. 1187db96d56Sopenharmony_ci 1197db96d56Sopenharmony_ci :func:`~enum.property` 1207db96d56Sopenharmony_ci 1217db96d56Sopenharmony_ci Allows :class:`Enum` members to have attributes without conflicting with 1227db96d56Sopenharmony_ci member names. 1237db96d56Sopenharmony_ci 1247db96d56Sopenharmony_ci :func:`unique` 1257db96d56Sopenharmony_ci 1267db96d56Sopenharmony_ci Enum class decorator that ensures only one name is bound to any one value. 1277db96d56Sopenharmony_ci 1287db96d56Sopenharmony_ci :func:`verify` 1297db96d56Sopenharmony_ci 1307db96d56Sopenharmony_ci Enum class decorator that checks user-selectable constraints on an 1317db96d56Sopenharmony_ci enumeration. 1327db96d56Sopenharmony_ci 1337db96d56Sopenharmony_ci :func:`member` 1347db96d56Sopenharmony_ci 1357db96d56Sopenharmony_ci Make ``obj`` a member. Can be used as a decorator. 1367db96d56Sopenharmony_ci 1377db96d56Sopenharmony_ci :func:`nonmember` 1387db96d56Sopenharmony_ci 1397db96d56Sopenharmony_ci Do not make ``obj`` a member. Can be used as a decorator. 1407db96d56Sopenharmony_ci 1417db96d56Sopenharmony_ci :func:`global_enum` 1427db96d56Sopenharmony_ci 1437db96d56Sopenharmony_ci Modify the :class:`str() <str>` and :func:`repr` of an enum 1447db96d56Sopenharmony_ci to show its members as belonging to the module instead of its class, 1457db96d56Sopenharmony_ci and export the enum members to the global namespace. 1467db96d56Sopenharmony_ci 1477db96d56Sopenharmony_ci :func:`show_flag_values` 1487db96d56Sopenharmony_ci 1497db96d56Sopenharmony_ci Return a list of all power-of-two integers contained in a flag. 1507db96d56Sopenharmony_ci 1517db96d56Sopenharmony_ci 1527db96d56Sopenharmony_ci.. versionadded:: 3.6 ``Flag``, ``IntFlag``, ``auto`` 1537db96d56Sopenharmony_ci.. versionadded:: 3.11 ``StrEnum``, ``EnumCheck``, ``ReprEnum``, ``FlagBoundary``, ``property``, ``member``, ``nonmember``, ``global_enum``, ``show_flag_values`` 1547db96d56Sopenharmony_ci 1557db96d56Sopenharmony_ci--------------- 1567db96d56Sopenharmony_ci 1577db96d56Sopenharmony_ciData Types 1587db96d56Sopenharmony_ci---------- 1597db96d56Sopenharmony_ci 1607db96d56Sopenharmony_ci 1617db96d56Sopenharmony_ci.. class:: EnumType 1627db96d56Sopenharmony_ci 1637db96d56Sopenharmony_ci *EnumType* is the :term:`metaclass` for *enum* enumerations. It is possible 1647db96d56Sopenharmony_ci to subclass *EnumType* -- see :ref:`Subclassing EnumType <enumtype-examples>` 1657db96d56Sopenharmony_ci for details. 1667db96d56Sopenharmony_ci 1677db96d56Sopenharmony_ci *EnumType* is responsible for setting the correct :meth:`!__repr__`, 1687db96d56Sopenharmony_ci :meth:`!__str__`, :meth:`!__format__`, and :meth:`!__reduce__` methods on the 1697db96d56Sopenharmony_ci final *enum*, as well as creating the enum members, properly handling 1707db96d56Sopenharmony_ci duplicates, providing iteration over the enum class, etc. 1717db96d56Sopenharmony_ci 1727db96d56Sopenharmony_ci .. method:: EnumType.__call__(cls, value, names=None, *, module=None, qualname=None, type=None, start=1, boundary=None) 1737db96d56Sopenharmony_ci 1747db96d56Sopenharmony_ci This method is called in two different ways: 1757db96d56Sopenharmony_ci 1767db96d56Sopenharmony_ci * to look up an existing member: 1777db96d56Sopenharmony_ci 1787db96d56Sopenharmony_ci :cls: The enum class being called. 1797db96d56Sopenharmony_ci :value: The value to lookup. 1807db96d56Sopenharmony_ci 1817db96d56Sopenharmony_ci * to use the ``cls`` enum to create a new enum (only if the existing enum 1827db96d56Sopenharmony_ci does not have any members): 1837db96d56Sopenharmony_ci 1847db96d56Sopenharmony_ci :cls: The enum class being called. 1857db96d56Sopenharmony_ci :value: The name of the new Enum to create. 1867db96d56Sopenharmony_ci :names: The names/values of the members for the new Enum. 1877db96d56Sopenharmony_ci :module: The name of the module the new Enum is created in. 1887db96d56Sopenharmony_ci :qualname: The actual location in the module where this Enum can be found. 1897db96d56Sopenharmony_ci :type: A mix-in type for the new Enum. 1907db96d56Sopenharmony_ci :start: The first integer value for the Enum (used by :class:`auto`). 1917db96d56Sopenharmony_ci :boundary: How to handle out-of-range values from bit operations (:class:`Flag` only). 1927db96d56Sopenharmony_ci 1937db96d56Sopenharmony_ci .. method:: EnumType.__contains__(cls, member) 1947db96d56Sopenharmony_ci 1957db96d56Sopenharmony_ci Returns ``True`` if member belongs to the ``cls``:: 1967db96d56Sopenharmony_ci 1977db96d56Sopenharmony_ci >>> some_var = Color.RED 1987db96d56Sopenharmony_ci >>> some_var in Color 1997db96d56Sopenharmony_ci True 2007db96d56Sopenharmony_ci 2017db96d56Sopenharmony_ci .. note:: 2027db96d56Sopenharmony_ci 2037db96d56Sopenharmony_ci In Python 3.12 it will be possible to check for member values and not 2047db96d56Sopenharmony_ci just members; until then, a ``TypeError`` will be raised if a 2057db96d56Sopenharmony_ci non-Enum-member is used in a containment check. 2067db96d56Sopenharmony_ci 2077db96d56Sopenharmony_ci .. method:: EnumType.__dir__(cls) 2087db96d56Sopenharmony_ci 2097db96d56Sopenharmony_ci Returns ``['__class__', '__doc__', '__members__', '__module__']`` and the 2107db96d56Sopenharmony_ci names of the members in *cls*:: 2117db96d56Sopenharmony_ci 2127db96d56Sopenharmony_ci >>> dir(Color) 2137db96d56Sopenharmony_ci ['BLUE', 'GREEN', 'RED', '__class__', '__contains__', '__doc__', '__getitem__', '__init_subclass__', '__iter__', '__len__', '__members__', '__module__', '__name__', '__qualname__'] 2147db96d56Sopenharmony_ci 2157db96d56Sopenharmony_ci .. method:: EnumType.__getattr__(cls, name) 2167db96d56Sopenharmony_ci 2177db96d56Sopenharmony_ci Returns the Enum member in *cls* matching *name*, or raises an :exc:`AttributeError`:: 2187db96d56Sopenharmony_ci 2197db96d56Sopenharmony_ci >>> Color.GREEN 2207db96d56Sopenharmony_ci <Color.GREEN: 2> 2217db96d56Sopenharmony_ci 2227db96d56Sopenharmony_ci .. method:: EnumType.__getitem__(cls, name) 2237db96d56Sopenharmony_ci 2247db96d56Sopenharmony_ci Returns the Enum member in *cls* matching *name*, or raises a :exc:`KeyError`:: 2257db96d56Sopenharmony_ci 2267db96d56Sopenharmony_ci >>> Color['BLUE'] 2277db96d56Sopenharmony_ci <Color.BLUE: 3> 2287db96d56Sopenharmony_ci 2297db96d56Sopenharmony_ci .. method:: EnumType.__iter__(cls) 2307db96d56Sopenharmony_ci 2317db96d56Sopenharmony_ci Returns each member in *cls* in definition order:: 2327db96d56Sopenharmony_ci 2337db96d56Sopenharmony_ci >>> list(Color) 2347db96d56Sopenharmony_ci [<Color.RED: 1>, <Color.GREEN: 2>, <Color.BLUE: 3>] 2357db96d56Sopenharmony_ci 2367db96d56Sopenharmony_ci .. method:: EnumType.__len__(cls) 2377db96d56Sopenharmony_ci 2387db96d56Sopenharmony_ci Returns the number of member in *cls*:: 2397db96d56Sopenharmony_ci 2407db96d56Sopenharmony_ci >>> len(Color) 2417db96d56Sopenharmony_ci 3 2427db96d56Sopenharmony_ci 2437db96d56Sopenharmony_ci .. method:: EnumType.__reversed__(cls) 2447db96d56Sopenharmony_ci 2457db96d56Sopenharmony_ci Returns each member in *cls* in reverse definition order:: 2467db96d56Sopenharmony_ci 2477db96d56Sopenharmony_ci >>> list(reversed(Color)) 2487db96d56Sopenharmony_ci [<Color.BLUE: 3>, <Color.GREEN: 2>, <Color.RED: 1>] 2497db96d56Sopenharmony_ci 2507db96d56Sopenharmony_ci 2517db96d56Sopenharmony_ci.. class:: Enum 2527db96d56Sopenharmony_ci 2537db96d56Sopenharmony_ci *Enum* is the base class for all *enum* enumerations. 2547db96d56Sopenharmony_ci 2557db96d56Sopenharmony_ci .. attribute:: Enum.name 2567db96d56Sopenharmony_ci 2577db96d56Sopenharmony_ci The name used to define the ``Enum`` member:: 2587db96d56Sopenharmony_ci 2597db96d56Sopenharmony_ci >>> Color.BLUE.name 2607db96d56Sopenharmony_ci 'BLUE' 2617db96d56Sopenharmony_ci 2627db96d56Sopenharmony_ci .. attribute:: Enum.value 2637db96d56Sopenharmony_ci 2647db96d56Sopenharmony_ci The value given to the ``Enum`` member:: 2657db96d56Sopenharmony_ci 2667db96d56Sopenharmony_ci >>> Color.RED.value 2677db96d56Sopenharmony_ci 1 2687db96d56Sopenharmony_ci 2697db96d56Sopenharmony_ci .. note:: Enum member values 2707db96d56Sopenharmony_ci 2717db96d56Sopenharmony_ci Member values can be anything: :class:`int`, :class:`str`, etc. If 2727db96d56Sopenharmony_ci the exact value is unimportant you may use :class:`auto` instances and an 2737db96d56Sopenharmony_ci appropriate value will be chosen for you. See :class:`auto` for the 2747db96d56Sopenharmony_ci details. 2757db96d56Sopenharmony_ci 2767db96d56Sopenharmony_ci .. attribute:: Enum._ignore_ 2777db96d56Sopenharmony_ci 2787db96d56Sopenharmony_ci ``_ignore_`` is only used during creation and is removed from the 2797db96d56Sopenharmony_ci enumeration once creation is complete. 2807db96d56Sopenharmony_ci 2817db96d56Sopenharmony_ci ``_ignore_`` is a list of names that will not become members, and whose 2827db96d56Sopenharmony_ci names will also be removed from the completed enumeration. See 2837db96d56Sopenharmony_ci :ref:`TimePeriod <enum-time-period>` for an example. 2847db96d56Sopenharmony_ci 2857db96d56Sopenharmony_ci .. method:: Enum.__dir__(self) 2867db96d56Sopenharmony_ci 2877db96d56Sopenharmony_ci Returns ``['__class__', '__doc__', '__module__', 'name', 'value']`` and 2887db96d56Sopenharmony_ci any public methods defined on *self.__class__*:: 2897db96d56Sopenharmony_ci 2907db96d56Sopenharmony_ci >>> from datetime import date 2917db96d56Sopenharmony_ci >>> class Weekday(Enum): 2927db96d56Sopenharmony_ci ... MONDAY = 1 2937db96d56Sopenharmony_ci ... TUESDAY = 2 2947db96d56Sopenharmony_ci ... WEDNESDAY = 3 2957db96d56Sopenharmony_ci ... THURSDAY = 4 2967db96d56Sopenharmony_ci ... FRIDAY = 5 2977db96d56Sopenharmony_ci ... SATURDAY = 6 2987db96d56Sopenharmony_ci ... SUNDAY = 7 2997db96d56Sopenharmony_ci ... @classmethod 3007db96d56Sopenharmony_ci ... def today(cls): 3017db96d56Sopenharmony_ci ... print('today is %s' % cls(date.today().isoweekday()).name) 3027db96d56Sopenharmony_ci >>> dir(Weekday.SATURDAY) 3037db96d56Sopenharmony_ci ['__class__', '__doc__', '__eq__', '__hash__', '__module__', 'name', 'today', 'value'] 3047db96d56Sopenharmony_ci 3057db96d56Sopenharmony_ci .. method:: Enum._generate_next_value_(name, start, count, last_values) 3067db96d56Sopenharmony_ci 3077db96d56Sopenharmony_ci :name: The name of the member being defined (e.g. 'RED'). 3087db96d56Sopenharmony_ci :start: The start value for the Enum; the default is 1. 3097db96d56Sopenharmony_ci :count: The number of members currently defined, not including this one. 3107db96d56Sopenharmony_ci :last_values: A list of the previous values. 3117db96d56Sopenharmony_ci 3127db96d56Sopenharmony_ci A *staticmethod* that is used to determine the next value returned by 3137db96d56Sopenharmony_ci :class:`auto`:: 3147db96d56Sopenharmony_ci 3157db96d56Sopenharmony_ci >>> from enum import auto 3167db96d56Sopenharmony_ci >>> class PowersOfThree(Enum): 3177db96d56Sopenharmony_ci ... @staticmethod 3187db96d56Sopenharmony_ci ... def _generate_next_value_(name, start, count, last_values): 3197db96d56Sopenharmony_ci ... return 3 ** (count + 1) 3207db96d56Sopenharmony_ci ... FIRST = auto() 3217db96d56Sopenharmony_ci ... SECOND = auto() 3227db96d56Sopenharmony_ci >>> PowersOfThree.SECOND.value 3237db96d56Sopenharmony_ci 9 3247db96d56Sopenharmony_ci 3257db96d56Sopenharmony_ci .. method:: Enum.__init_subclass__(cls, **kwds) 3267db96d56Sopenharmony_ci 3277db96d56Sopenharmony_ci A *classmethod* that is used to further configure subsequent subclasses. 3287db96d56Sopenharmony_ci By default, does nothing. 3297db96d56Sopenharmony_ci 3307db96d56Sopenharmony_ci .. method:: Enum._missing_(cls, value) 3317db96d56Sopenharmony_ci 3327db96d56Sopenharmony_ci A *classmethod* for looking up values not found in *cls*. By default it 3337db96d56Sopenharmony_ci does nothing, but can be overridden to implement custom search behavior:: 3347db96d56Sopenharmony_ci 3357db96d56Sopenharmony_ci >>> from enum import StrEnum 3367db96d56Sopenharmony_ci >>> class Build(StrEnum): 3377db96d56Sopenharmony_ci ... DEBUG = auto() 3387db96d56Sopenharmony_ci ... OPTIMIZED = auto() 3397db96d56Sopenharmony_ci ... @classmethod 3407db96d56Sopenharmony_ci ... def _missing_(cls, value): 3417db96d56Sopenharmony_ci ... value = value.lower() 3427db96d56Sopenharmony_ci ... for member in cls: 3437db96d56Sopenharmony_ci ... if member.value == value: 3447db96d56Sopenharmony_ci ... return member 3457db96d56Sopenharmony_ci ... return None 3467db96d56Sopenharmony_ci >>> Build.DEBUG.value 3477db96d56Sopenharmony_ci 'debug' 3487db96d56Sopenharmony_ci >>> Build('deBUG') 3497db96d56Sopenharmony_ci <Build.DEBUG: 'debug'> 3507db96d56Sopenharmony_ci 3517db96d56Sopenharmony_ci .. method:: Enum.__repr__(self) 3527db96d56Sopenharmony_ci 3537db96d56Sopenharmony_ci Returns the string used for *repr()* calls. By default, returns the 3547db96d56Sopenharmony_ci *Enum* name, member name, and value, but can be overridden:: 3557db96d56Sopenharmony_ci 3567db96d56Sopenharmony_ci >>> class OtherStyle(Enum): 3577db96d56Sopenharmony_ci ... ALTERNATE = auto() 3587db96d56Sopenharmony_ci ... OTHER = auto() 3597db96d56Sopenharmony_ci ... SOMETHING_ELSE = auto() 3607db96d56Sopenharmony_ci ... def __repr__(self): 3617db96d56Sopenharmony_ci ... cls_name = self.__class__.__name__ 3627db96d56Sopenharmony_ci ... return f'{cls_name}.{self.name}' 3637db96d56Sopenharmony_ci >>> OtherStyle.ALTERNATE, str(OtherStyle.ALTERNATE), f"{OtherStyle.ALTERNATE}" 3647db96d56Sopenharmony_ci (OtherStyle.ALTERNATE, 'OtherStyle.ALTERNATE', 'OtherStyle.ALTERNATE') 3657db96d56Sopenharmony_ci 3667db96d56Sopenharmony_ci .. method:: Enum.__str__(self) 3677db96d56Sopenharmony_ci 3687db96d56Sopenharmony_ci Returns the string used for *str()* calls. By default, returns the 3697db96d56Sopenharmony_ci *Enum* name and member name, but can be overridden:: 3707db96d56Sopenharmony_ci 3717db96d56Sopenharmony_ci >>> class OtherStyle(Enum): 3727db96d56Sopenharmony_ci ... ALTERNATE = auto() 3737db96d56Sopenharmony_ci ... OTHER = auto() 3747db96d56Sopenharmony_ci ... SOMETHING_ELSE = auto() 3757db96d56Sopenharmony_ci ... def __str__(self): 3767db96d56Sopenharmony_ci ... return f'{self.name}' 3777db96d56Sopenharmony_ci >>> OtherStyle.ALTERNATE, str(OtherStyle.ALTERNATE), f"{OtherStyle.ALTERNATE}" 3787db96d56Sopenharmony_ci (<OtherStyle.ALTERNATE: 1>, 'ALTERNATE', 'ALTERNATE') 3797db96d56Sopenharmony_ci 3807db96d56Sopenharmony_ci .. method:: Enum.__format__(self) 3817db96d56Sopenharmony_ci 3827db96d56Sopenharmony_ci Returns the string used for *format()* and *f-string* calls. By default, 3837db96d56Sopenharmony_ci returns :meth:`__str__` return value, but can be overridden:: 3847db96d56Sopenharmony_ci 3857db96d56Sopenharmony_ci >>> class OtherStyle(Enum): 3867db96d56Sopenharmony_ci ... ALTERNATE = auto() 3877db96d56Sopenharmony_ci ... OTHER = auto() 3887db96d56Sopenharmony_ci ... SOMETHING_ELSE = auto() 3897db96d56Sopenharmony_ci ... def __format__(self, spec): 3907db96d56Sopenharmony_ci ... return f'{self.name}' 3917db96d56Sopenharmony_ci >>> OtherStyle.ALTERNATE, str(OtherStyle.ALTERNATE), f"{OtherStyle.ALTERNATE}" 3927db96d56Sopenharmony_ci (<OtherStyle.ALTERNATE: 1>, 'OtherStyle.ALTERNATE', 'ALTERNATE') 3937db96d56Sopenharmony_ci 3947db96d56Sopenharmony_ci .. note:: 3957db96d56Sopenharmony_ci 3967db96d56Sopenharmony_ci Using :class:`auto` with :class:`Enum` results in integers of increasing value, 3977db96d56Sopenharmony_ci starting with ``1``. 3987db96d56Sopenharmony_ci 3997db96d56Sopenharmony_ci 4007db96d56Sopenharmony_ci.. class:: IntEnum 4017db96d56Sopenharmony_ci 4027db96d56Sopenharmony_ci *IntEnum* is the same as *Enum*, but its members are also integers and can be 4037db96d56Sopenharmony_ci used anywhere that an integer can be used. If any integer operation is performed 4047db96d56Sopenharmony_ci with an *IntEnum* member, the resulting value loses its enumeration status. 4057db96d56Sopenharmony_ci 4067db96d56Sopenharmony_ci >>> from enum import IntEnum 4077db96d56Sopenharmony_ci >>> class Number(IntEnum): 4087db96d56Sopenharmony_ci ... ONE = 1 4097db96d56Sopenharmony_ci ... TWO = 2 4107db96d56Sopenharmony_ci ... THREE = 3 4117db96d56Sopenharmony_ci ... 4127db96d56Sopenharmony_ci >>> Number.THREE 4137db96d56Sopenharmony_ci <Number.THREE: 3> 4147db96d56Sopenharmony_ci >>> Number.ONE + Number.TWO 4157db96d56Sopenharmony_ci 3 4167db96d56Sopenharmony_ci >>> Number.THREE + 5 4177db96d56Sopenharmony_ci 8 4187db96d56Sopenharmony_ci >>> Number.THREE == 3 4197db96d56Sopenharmony_ci True 4207db96d56Sopenharmony_ci 4217db96d56Sopenharmony_ci .. note:: 4227db96d56Sopenharmony_ci 4237db96d56Sopenharmony_ci Using :class:`auto` with :class:`IntEnum` results in integers of increasing 4247db96d56Sopenharmony_ci value, starting with ``1``. 4257db96d56Sopenharmony_ci 4267db96d56Sopenharmony_ci .. versionchanged:: 3.11 :meth:`~object.__str__` is now :meth:`!int.__str__` to 4277db96d56Sopenharmony_ci better support the *replacement of existing constants* use-case. 4287db96d56Sopenharmony_ci :meth:`~object.__format__` was already :meth:`!int.__format__` for that same reason. 4297db96d56Sopenharmony_ci 4307db96d56Sopenharmony_ci 4317db96d56Sopenharmony_ci.. class:: StrEnum 4327db96d56Sopenharmony_ci 4337db96d56Sopenharmony_ci *StrEnum* is the same as *Enum*, but its members are also strings and can be used 4347db96d56Sopenharmony_ci in most of the same places that a string can be used. The result of any string 4357db96d56Sopenharmony_ci operation performed on or with a *StrEnum* member is not part of the enumeration. 4367db96d56Sopenharmony_ci 4377db96d56Sopenharmony_ci .. note:: 4387db96d56Sopenharmony_ci 4397db96d56Sopenharmony_ci There are places in the stdlib that check for an exact :class:`str` 4407db96d56Sopenharmony_ci instead of a :class:`str` subclass (i.e. ``type(unknown) == str`` 4417db96d56Sopenharmony_ci instead of ``isinstance(unknown, str)``), and in those locations you 4427db96d56Sopenharmony_ci will need to use ``str(StrEnum.member)``. 4437db96d56Sopenharmony_ci 4447db96d56Sopenharmony_ci .. note:: 4457db96d56Sopenharmony_ci 4467db96d56Sopenharmony_ci Using :class:`auto` with :class:`StrEnum` results in the lower-cased member 4477db96d56Sopenharmony_ci name as the value. 4487db96d56Sopenharmony_ci 4497db96d56Sopenharmony_ci .. note:: 4507db96d56Sopenharmony_ci 4517db96d56Sopenharmony_ci :meth:`~object.__str__` is :meth:`!str.__str__` to better support the 4527db96d56Sopenharmony_ci *replacement of existing constants* use-case. :meth:`~object.__format__` is likewise 4537db96d56Sopenharmony_ci :meth:`!str.__format__` for that same reason. 4547db96d56Sopenharmony_ci 4557db96d56Sopenharmony_ci .. versionadded:: 3.11 4567db96d56Sopenharmony_ci 4577db96d56Sopenharmony_ci.. class:: Flag 4587db96d56Sopenharmony_ci 4597db96d56Sopenharmony_ci *Flag* members support the bitwise operators ``&`` (*AND*), ``|`` (*OR*), 4607db96d56Sopenharmony_ci ``^`` (*XOR*), and ``~`` (*INVERT*); the results of those operators are members 4617db96d56Sopenharmony_ci of the enumeration. 4627db96d56Sopenharmony_ci 4637db96d56Sopenharmony_ci .. method:: __contains__(self, value) 4647db96d56Sopenharmony_ci 4657db96d56Sopenharmony_ci Returns *True* if value is in self:: 4667db96d56Sopenharmony_ci 4677db96d56Sopenharmony_ci >>> from enum import Flag, auto 4687db96d56Sopenharmony_ci >>> class Color(Flag): 4697db96d56Sopenharmony_ci ... RED = auto() 4707db96d56Sopenharmony_ci ... GREEN = auto() 4717db96d56Sopenharmony_ci ... BLUE = auto() 4727db96d56Sopenharmony_ci >>> purple = Color.RED | Color.BLUE 4737db96d56Sopenharmony_ci >>> white = Color.RED | Color.GREEN | Color.BLUE 4747db96d56Sopenharmony_ci >>> Color.GREEN in purple 4757db96d56Sopenharmony_ci False 4767db96d56Sopenharmony_ci >>> Color.GREEN in white 4777db96d56Sopenharmony_ci True 4787db96d56Sopenharmony_ci >>> purple in white 4797db96d56Sopenharmony_ci True 4807db96d56Sopenharmony_ci >>> white in purple 4817db96d56Sopenharmony_ci False 4827db96d56Sopenharmony_ci 4837db96d56Sopenharmony_ci .. method:: __iter__(self): 4847db96d56Sopenharmony_ci 4857db96d56Sopenharmony_ci Returns all contained non-alias members:: 4867db96d56Sopenharmony_ci 4877db96d56Sopenharmony_ci >>> list(Color.RED) 4887db96d56Sopenharmony_ci [<Color.RED: 1>] 4897db96d56Sopenharmony_ci >>> list(purple) 4907db96d56Sopenharmony_ci [<Color.RED: 1>, <Color.BLUE: 4>] 4917db96d56Sopenharmony_ci 4927db96d56Sopenharmony_ci .. versionchanged:: 3.11 4937db96d56Sopenharmony_ci 4947db96d56Sopenharmony_ci Aliases are no longer returned during iteration. 4957db96d56Sopenharmony_ci 4967db96d56Sopenharmony_ci .. method:: __len__(self): 4977db96d56Sopenharmony_ci 4987db96d56Sopenharmony_ci Returns number of members in flag:: 4997db96d56Sopenharmony_ci 5007db96d56Sopenharmony_ci >>> len(Color.GREEN) 5017db96d56Sopenharmony_ci 1 5027db96d56Sopenharmony_ci >>> len(white) 5037db96d56Sopenharmony_ci 3 5047db96d56Sopenharmony_ci 5057db96d56Sopenharmony_ci .. method:: __bool__(self): 5067db96d56Sopenharmony_ci 5077db96d56Sopenharmony_ci Returns *True* if any members in flag, *False* otherwise:: 5087db96d56Sopenharmony_ci 5097db96d56Sopenharmony_ci >>> bool(Color.GREEN) 5107db96d56Sopenharmony_ci True 5117db96d56Sopenharmony_ci >>> bool(white) 5127db96d56Sopenharmony_ci True 5137db96d56Sopenharmony_ci >>> black = Color(0) 5147db96d56Sopenharmony_ci >>> bool(black) 5157db96d56Sopenharmony_ci False 5167db96d56Sopenharmony_ci 5177db96d56Sopenharmony_ci .. method:: __or__(self, other) 5187db96d56Sopenharmony_ci 5197db96d56Sopenharmony_ci Returns current flag binary or'ed with other:: 5207db96d56Sopenharmony_ci 5217db96d56Sopenharmony_ci >>> Color.RED | Color.GREEN 5227db96d56Sopenharmony_ci <Color.RED|GREEN: 3> 5237db96d56Sopenharmony_ci 5247db96d56Sopenharmony_ci .. method:: __and__(self, other) 5257db96d56Sopenharmony_ci 5267db96d56Sopenharmony_ci Returns current flag binary and'ed with other:: 5277db96d56Sopenharmony_ci 5287db96d56Sopenharmony_ci >>> purple & white 5297db96d56Sopenharmony_ci <Color.RED|BLUE: 5> 5307db96d56Sopenharmony_ci >>> purple & Color.GREEN 5317db96d56Sopenharmony_ci <Color: 0> 5327db96d56Sopenharmony_ci 5337db96d56Sopenharmony_ci .. method:: __xor__(self, other) 5347db96d56Sopenharmony_ci 5357db96d56Sopenharmony_ci Returns current flag binary xor'ed with other:: 5367db96d56Sopenharmony_ci 5377db96d56Sopenharmony_ci >>> purple ^ white 5387db96d56Sopenharmony_ci <Color.GREEN: 2> 5397db96d56Sopenharmony_ci >>> purple ^ Color.GREEN 5407db96d56Sopenharmony_ci <Color.RED|GREEN|BLUE: 7> 5417db96d56Sopenharmony_ci 5427db96d56Sopenharmony_ci .. method:: __invert__(self): 5437db96d56Sopenharmony_ci 5447db96d56Sopenharmony_ci Returns all the flags in *type(self)* that are not in self:: 5457db96d56Sopenharmony_ci 5467db96d56Sopenharmony_ci >>> ~white 5477db96d56Sopenharmony_ci <Color: 0> 5487db96d56Sopenharmony_ci >>> ~purple 5497db96d56Sopenharmony_ci <Color.GREEN: 2> 5507db96d56Sopenharmony_ci >>> ~Color.RED 5517db96d56Sopenharmony_ci <Color.GREEN|BLUE: 6> 5527db96d56Sopenharmony_ci 5537db96d56Sopenharmony_ci .. method:: _numeric_repr_ 5547db96d56Sopenharmony_ci 5557db96d56Sopenharmony_ci Function used to format any remaining unnamed numeric values. Default is 5567db96d56Sopenharmony_ci the value's repr; common choices are :func:`hex` and :func:`oct`. 5577db96d56Sopenharmony_ci 5587db96d56Sopenharmony_ci .. note:: 5597db96d56Sopenharmony_ci 5607db96d56Sopenharmony_ci Using :class:`auto` with :class:`Flag` results in integers that are powers 5617db96d56Sopenharmony_ci of two, starting with ``1``. 5627db96d56Sopenharmony_ci 5637db96d56Sopenharmony_ci .. versionchanged:: 3.11 The *repr()* of zero-valued flags has changed. It 5647db96d56Sopenharmony_ci is now:: 5657db96d56Sopenharmony_ci 5667db96d56Sopenharmony_ci >>> Color(0) # doctest: +SKIP 5677db96d56Sopenharmony_ci <Color: 0> 5687db96d56Sopenharmony_ci 5697db96d56Sopenharmony_ci.. class:: IntFlag 5707db96d56Sopenharmony_ci 5717db96d56Sopenharmony_ci *IntFlag* is the same as *Flag*, but its members are also integers and can be 5727db96d56Sopenharmony_ci used anywhere that an integer can be used. 5737db96d56Sopenharmony_ci 5747db96d56Sopenharmony_ci >>> from enum import IntFlag, auto 5757db96d56Sopenharmony_ci >>> class Color(IntFlag): 5767db96d56Sopenharmony_ci ... RED = auto() 5777db96d56Sopenharmony_ci ... GREEN = auto() 5787db96d56Sopenharmony_ci ... BLUE = auto() 5797db96d56Sopenharmony_ci >>> Color.RED & 2 5807db96d56Sopenharmony_ci <Color: 0> 5817db96d56Sopenharmony_ci >>> Color.RED | 2 5827db96d56Sopenharmony_ci <Color.RED|GREEN: 3> 5837db96d56Sopenharmony_ci 5847db96d56Sopenharmony_ci If any integer operation is performed with an *IntFlag* member, the result is 5857db96d56Sopenharmony_ci not an *IntFlag*:: 5867db96d56Sopenharmony_ci 5877db96d56Sopenharmony_ci >>> Color.RED + 2 5887db96d56Sopenharmony_ci 3 5897db96d56Sopenharmony_ci 5907db96d56Sopenharmony_ci If a *Flag* operation is performed with an *IntFlag* member and: 5917db96d56Sopenharmony_ci 5927db96d56Sopenharmony_ci * the result is a valid *IntFlag*: an *IntFlag* is returned 5937db96d56Sopenharmony_ci * the result is not a valid *IntFlag*: the result depends on the *FlagBoundary* setting 5947db96d56Sopenharmony_ci 5957db96d56Sopenharmony_ci The *repr()* of unnamed zero-valued flags has changed. It is now: 5967db96d56Sopenharmony_ci 5977db96d56Sopenharmony_ci >>> Color(0) 5987db96d56Sopenharmony_ci <Color: 0> 5997db96d56Sopenharmony_ci 6007db96d56Sopenharmony_ci .. note:: 6017db96d56Sopenharmony_ci 6027db96d56Sopenharmony_ci Using :class:`auto` with :class:`IntFlag` results in integers that are powers 6037db96d56Sopenharmony_ci of two, starting with ``1``. 6047db96d56Sopenharmony_ci 6057db96d56Sopenharmony_ci .. versionchanged:: 3.11 6067db96d56Sopenharmony_ci 6077db96d56Sopenharmony_ci :meth:`~object.__str__` is now :meth:`!int.__str__` to better support the 6087db96d56Sopenharmony_ci *replacement of existing constants* use-case. :meth:`~object.__format__` was 6097db96d56Sopenharmony_ci already :meth:`!int.__format__` for that same reason. 6107db96d56Sopenharmony_ci 6117db96d56Sopenharmony_ci Inversion of an :class:`!IntFlag` now returns a positive value that is the 6127db96d56Sopenharmony_ci union of all flags not in the given flag, rather than a negative value. 6137db96d56Sopenharmony_ci This matches the existing :class:`Flag` behavior. 6147db96d56Sopenharmony_ci 6157db96d56Sopenharmony_ci.. class:: ReprEnum 6167db96d56Sopenharmony_ci 6177db96d56Sopenharmony_ci :class:`!ReprEnum` uses the :meth:`repr() <Enum.__repr__>` of :class:`Enum`, 6187db96d56Sopenharmony_ci but the :class:`str() <str>` of the mixed-in data type: 6197db96d56Sopenharmony_ci 6207db96d56Sopenharmony_ci * :meth:`!int.__str__` for :class:`IntEnum` and :class:`IntFlag` 6217db96d56Sopenharmony_ci * :meth:`!str.__str__` for :class:`StrEnum` 6227db96d56Sopenharmony_ci 6237db96d56Sopenharmony_ci Inherit from :class:`!ReprEnum` to keep the :class:`str() <str>` / :func:`format` 6247db96d56Sopenharmony_ci of the mixed-in data type instead of using the 6257db96d56Sopenharmony_ci :class:`Enum`-default :meth:`str() <Enum.__str__>`. 6267db96d56Sopenharmony_ci 6277db96d56Sopenharmony_ci 6287db96d56Sopenharmony_ci .. versionadded:: 3.11 6297db96d56Sopenharmony_ci 6307db96d56Sopenharmony_ci.. class:: EnumCheck 6317db96d56Sopenharmony_ci 6327db96d56Sopenharmony_ci *EnumCheck* contains the options used by the :func:`verify` decorator to ensure 6337db96d56Sopenharmony_ci various constraints; failed constraints result in a :exc:`ValueError`. 6347db96d56Sopenharmony_ci 6357db96d56Sopenharmony_ci .. attribute:: UNIQUE 6367db96d56Sopenharmony_ci 6377db96d56Sopenharmony_ci Ensure that each value has only one name:: 6387db96d56Sopenharmony_ci 6397db96d56Sopenharmony_ci >>> from enum import Enum, verify, UNIQUE 6407db96d56Sopenharmony_ci >>> @verify(UNIQUE) 6417db96d56Sopenharmony_ci ... class Color(Enum): 6427db96d56Sopenharmony_ci ... RED = 1 6437db96d56Sopenharmony_ci ... GREEN = 2 6447db96d56Sopenharmony_ci ... BLUE = 3 6457db96d56Sopenharmony_ci ... CRIMSON = 1 6467db96d56Sopenharmony_ci Traceback (most recent call last): 6477db96d56Sopenharmony_ci ... 6487db96d56Sopenharmony_ci ValueError: aliases found in <enum 'Color'>: CRIMSON -> RED 6497db96d56Sopenharmony_ci 6507db96d56Sopenharmony_ci 6517db96d56Sopenharmony_ci .. attribute:: CONTINUOUS 6527db96d56Sopenharmony_ci 6537db96d56Sopenharmony_ci Ensure that there are no missing values between the lowest-valued member 6547db96d56Sopenharmony_ci and the highest-valued member:: 6557db96d56Sopenharmony_ci 6567db96d56Sopenharmony_ci >>> from enum import Enum, verify, CONTINUOUS 6577db96d56Sopenharmony_ci >>> @verify(CONTINUOUS) 6587db96d56Sopenharmony_ci ... class Color(Enum): 6597db96d56Sopenharmony_ci ... RED = 1 6607db96d56Sopenharmony_ci ... GREEN = 2 6617db96d56Sopenharmony_ci ... BLUE = 5 6627db96d56Sopenharmony_ci Traceback (most recent call last): 6637db96d56Sopenharmony_ci ... 6647db96d56Sopenharmony_ci ValueError: invalid enum 'Color': missing values 3, 4 6657db96d56Sopenharmony_ci 6667db96d56Sopenharmony_ci .. attribute:: NAMED_FLAGS 6677db96d56Sopenharmony_ci 6687db96d56Sopenharmony_ci Ensure that any flag groups/masks contain only named flags -- useful when 6697db96d56Sopenharmony_ci values are specified instead of being generated by :func:`auto`:: 6707db96d56Sopenharmony_ci 6717db96d56Sopenharmony_ci >>> from enum import Flag, verify, NAMED_FLAGS 6727db96d56Sopenharmony_ci >>> @verify(NAMED_FLAGS) 6737db96d56Sopenharmony_ci ... class Color(Flag): 6747db96d56Sopenharmony_ci ... RED = 1 6757db96d56Sopenharmony_ci ... GREEN = 2 6767db96d56Sopenharmony_ci ... BLUE = 4 6777db96d56Sopenharmony_ci ... WHITE = 15 6787db96d56Sopenharmony_ci ... NEON = 31 6797db96d56Sopenharmony_ci Traceback (most recent call last): 6807db96d56Sopenharmony_ci ... 6817db96d56Sopenharmony_ci ValueError: invalid Flag 'Color': aliases WHITE and NEON are missing combined values of 0x18 [use enum.show_flag_values(value) for details] 6827db96d56Sopenharmony_ci 6837db96d56Sopenharmony_ci .. note:: 6847db96d56Sopenharmony_ci 6857db96d56Sopenharmony_ci CONTINUOUS and NAMED_FLAGS are designed to work with integer-valued members. 6867db96d56Sopenharmony_ci 6877db96d56Sopenharmony_ci .. versionadded:: 3.11 6887db96d56Sopenharmony_ci 6897db96d56Sopenharmony_ci.. class:: FlagBoundary 6907db96d56Sopenharmony_ci 6917db96d56Sopenharmony_ci *FlagBoundary* controls how out-of-range values are handled in *Flag* and its 6927db96d56Sopenharmony_ci subclasses. 6937db96d56Sopenharmony_ci 6947db96d56Sopenharmony_ci .. attribute:: STRICT 6957db96d56Sopenharmony_ci 6967db96d56Sopenharmony_ci Out-of-range values cause a :exc:`ValueError` to be raised. This is the 6977db96d56Sopenharmony_ci default for :class:`Flag`:: 6987db96d56Sopenharmony_ci 6997db96d56Sopenharmony_ci >>> from enum import Flag, STRICT, auto 7007db96d56Sopenharmony_ci >>> class StrictFlag(Flag, boundary=STRICT): 7017db96d56Sopenharmony_ci ... RED = auto() 7027db96d56Sopenharmony_ci ... GREEN = auto() 7037db96d56Sopenharmony_ci ... BLUE = auto() 7047db96d56Sopenharmony_ci >>> StrictFlag(2**2 + 2**4) 7057db96d56Sopenharmony_ci Traceback (most recent call last): 7067db96d56Sopenharmony_ci ... 7077db96d56Sopenharmony_ci ValueError: <flag 'StrictFlag'> invalid value 20 7087db96d56Sopenharmony_ci given 0b0 10100 7097db96d56Sopenharmony_ci allowed 0b0 00111 7107db96d56Sopenharmony_ci 7117db96d56Sopenharmony_ci .. attribute:: CONFORM 7127db96d56Sopenharmony_ci 7137db96d56Sopenharmony_ci Out-of-range values have invalid values removed, leaving a valid *Flag* 7147db96d56Sopenharmony_ci value:: 7157db96d56Sopenharmony_ci 7167db96d56Sopenharmony_ci >>> from enum import Flag, CONFORM, auto 7177db96d56Sopenharmony_ci >>> class ConformFlag(Flag, boundary=CONFORM): 7187db96d56Sopenharmony_ci ... RED = auto() 7197db96d56Sopenharmony_ci ... GREEN = auto() 7207db96d56Sopenharmony_ci ... BLUE = auto() 7217db96d56Sopenharmony_ci >>> ConformFlag(2**2 + 2**4) 7227db96d56Sopenharmony_ci <ConformFlag.BLUE: 4> 7237db96d56Sopenharmony_ci 7247db96d56Sopenharmony_ci .. attribute:: EJECT 7257db96d56Sopenharmony_ci 7267db96d56Sopenharmony_ci Out-of-range values lose their *Flag* membership and revert to :class:`int`. 7277db96d56Sopenharmony_ci 7287db96d56Sopenharmony_ci >>> from enum import Flag, EJECT, auto 7297db96d56Sopenharmony_ci >>> class EjectFlag(Flag, boundary=EJECT): 7307db96d56Sopenharmony_ci ... RED = auto() 7317db96d56Sopenharmony_ci ... GREEN = auto() 7327db96d56Sopenharmony_ci ... BLUE = auto() 7337db96d56Sopenharmony_ci >>> EjectFlag(2**2 + 2**4) 7347db96d56Sopenharmony_ci 20 7357db96d56Sopenharmony_ci 7367db96d56Sopenharmony_ci .. attribute:: KEEP 7377db96d56Sopenharmony_ci 7387db96d56Sopenharmony_ci Out-of-range values are kept, and the *Flag* membership is kept. 7397db96d56Sopenharmony_ci This is the default for :class:`IntFlag`:: 7407db96d56Sopenharmony_ci 7417db96d56Sopenharmony_ci >>> from enum import Flag, KEEP, auto 7427db96d56Sopenharmony_ci >>> class KeepFlag(Flag, boundary=KEEP): 7437db96d56Sopenharmony_ci ... RED = auto() 7447db96d56Sopenharmony_ci ... GREEN = auto() 7457db96d56Sopenharmony_ci ... BLUE = auto() 7467db96d56Sopenharmony_ci >>> KeepFlag(2**2 + 2**4) 7477db96d56Sopenharmony_ci <KeepFlag.BLUE|16: 20> 7487db96d56Sopenharmony_ci 7497db96d56Sopenharmony_ci.. versionadded:: 3.11 7507db96d56Sopenharmony_ci 7517db96d56Sopenharmony_ci--------------- 7527db96d56Sopenharmony_ci 7537db96d56Sopenharmony_ciSupported ``__dunder__`` names 7547db96d56Sopenharmony_ci"""""""""""""""""""""""""""""" 7557db96d56Sopenharmony_ci 7567db96d56Sopenharmony_ci:attr:`~EnumType.__members__` is a read-only ordered mapping of ``member_name``:``member`` 7577db96d56Sopenharmony_ciitems. It is only available on the class. 7587db96d56Sopenharmony_ci 7597db96d56Sopenharmony_ci:meth:`~object.__new__`, if specified, must create and return the enum members; it is 7607db96d56Sopenharmony_cialso a very good idea to set the member's :attr:`!_value_` appropriately. Once 7617db96d56Sopenharmony_ciall the members are created it is no longer used. 7627db96d56Sopenharmony_ci 7637db96d56Sopenharmony_ci 7647db96d56Sopenharmony_ciSupported ``_sunder_`` names 7657db96d56Sopenharmony_ci"""""""""""""""""""""""""""" 7667db96d56Sopenharmony_ci 7677db96d56Sopenharmony_ci- ``_name_`` -- name of the member 7687db96d56Sopenharmony_ci- ``_value_`` -- value of the member; can be set / modified in ``__new__`` 7697db96d56Sopenharmony_ci 7707db96d56Sopenharmony_ci- ``_missing_`` -- a lookup function used when a value is not found; may be 7717db96d56Sopenharmony_ci overridden 7727db96d56Sopenharmony_ci- ``_ignore_`` -- a list of names, either as a :class:`list` or a :class:`str`, 7737db96d56Sopenharmony_ci that will not be transformed into members, and will be removed from the final 7747db96d56Sopenharmony_ci class 7757db96d56Sopenharmony_ci- ``_order_`` -- used in Python 2/3 code to ensure member order is consistent 7767db96d56Sopenharmony_ci (class attribute, removed during class creation) 7777db96d56Sopenharmony_ci- ``_generate_next_value_`` -- used to get an appropriate value for an enum 7787db96d56Sopenharmony_ci member; may be overridden 7797db96d56Sopenharmony_ci 7807db96d56Sopenharmony_ci .. note:: 7817db96d56Sopenharmony_ci 7827db96d56Sopenharmony_ci For standard :class:`Enum` classes the next value chosen is the last value seen 7837db96d56Sopenharmony_ci incremented by one. 7847db96d56Sopenharmony_ci 7857db96d56Sopenharmony_ci For :class:`Flag` classes the next value chosen will be the next highest 7867db96d56Sopenharmony_ci power-of-two, regardless of the last value seen. 7877db96d56Sopenharmony_ci 7887db96d56Sopenharmony_ci.. versionadded:: 3.6 ``_missing_``, ``_order_``, ``_generate_next_value_`` 7897db96d56Sopenharmony_ci.. versionadded:: 3.7 ``_ignore_`` 7907db96d56Sopenharmony_ci 7917db96d56Sopenharmony_ci--------------- 7927db96d56Sopenharmony_ci 7937db96d56Sopenharmony_ciUtilities and Decorators 7947db96d56Sopenharmony_ci------------------------ 7957db96d56Sopenharmony_ci 7967db96d56Sopenharmony_ci.. class:: auto 7977db96d56Sopenharmony_ci 7987db96d56Sopenharmony_ci *auto* can be used in place of a value. If used, the *Enum* machinery will 7997db96d56Sopenharmony_ci call an *Enum*'s :meth:`~Enum._generate_next_value_` to get an appropriate value. 8007db96d56Sopenharmony_ci For *Enum* and *IntEnum* that appropriate value will be the last value plus 8017db96d56Sopenharmony_ci one; for *Flag* and *IntFlag* it will be the first power-of-two greater 8027db96d56Sopenharmony_ci than the highest value; for *StrEnum* it will be the lower-cased version of 8037db96d56Sopenharmony_ci the member's name. Care must be taken if mixing *auto()* with manually 8047db96d56Sopenharmony_ci specified values. 8057db96d56Sopenharmony_ci 8067db96d56Sopenharmony_ci *auto* instances are only resolved when at the top level of an assignment: 8077db96d56Sopenharmony_ci 8087db96d56Sopenharmony_ci * ``FIRST = auto()`` will work (auto() is replaced with ``1``); 8097db96d56Sopenharmony_ci * ``SECOND = auto(), -2`` will work (auto is replaced with ``2``, so ``2, -2`` is 8107db96d56Sopenharmony_ci used to create the ``SECOND`` enum member; 8117db96d56Sopenharmony_ci * ``THREE = [auto(), -3]`` will *not* work (``<auto instance>, -3`` is used to 8127db96d56Sopenharmony_ci create the ``THREE`` enum member) 8137db96d56Sopenharmony_ci 8147db96d56Sopenharmony_ci .. versionchanged:: 3.11.1 8157db96d56Sopenharmony_ci 8167db96d56Sopenharmony_ci In prior versions, ``auto()`` had to be the only thing 8177db96d56Sopenharmony_ci on the assignment line to work properly. 8187db96d56Sopenharmony_ci 8197db96d56Sopenharmony_ci ``_generate_next_value_`` can be overridden to customize the values used by 8207db96d56Sopenharmony_ci *auto*. 8217db96d56Sopenharmony_ci 8227db96d56Sopenharmony_ci .. note:: in 3.13 the default ``_generate_next_value_`` will always return 8237db96d56Sopenharmony_ci the highest member value incremented by 1, and will fail if any 8247db96d56Sopenharmony_ci member is an incompatible type. 8257db96d56Sopenharmony_ci 8267db96d56Sopenharmony_ci.. decorator:: property 8277db96d56Sopenharmony_ci 8287db96d56Sopenharmony_ci A decorator similar to the built-in *property*, but specifically for 8297db96d56Sopenharmony_ci enumerations. It allows member attributes to have the same names as members 8307db96d56Sopenharmony_ci themselves. 8317db96d56Sopenharmony_ci 8327db96d56Sopenharmony_ci .. note:: the *property* and the member must be defined in separate classes; 8337db96d56Sopenharmony_ci for example, the *value* and *name* attributes are defined in the 8347db96d56Sopenharmony_ci *Enum* class, and *Enum* subclasses can define members with the 8357db96d56Sopenharmony_ci names ``value`` and ``name``. 8367db96d56Sopenharmony_ci 8377db96d56Sopenharmony_ci .. versionadded:: 3.11 8387db96d56Sopenharmony_ci 8397db96d56Sopenharmony_ci.. decorator:: unique 8407db96d56Sopenharmony_ci 8417db96d56Sopenharmony_ci A :keyword:`class` decorator specifically for enumerations. It searches an 8427db96d56Sopenharmony_ci enumeration's :attr:`~EnumType.__members__`, gathering any aliases it finds; if any are 8437db96d56Sopenharmony_ci found :exc:`ValueError` is raised with the details:: 8447db96d56Sopenharmony_ci 8457db96d56Sopenharmony_ci >>> from enum import Enum, unique 8467db96d56Sopenharmony_ci >>> @unique 8477db96d56Sopenharmony_ci ... class Mistake(Enum): 8487db96d56Sopenharmony_ci ... ONE = 1 8497db96d56Sopenharmony_ci ... TWO = 2 8507db96d56Sopenharmony_ci ... THREE = 3 8517db96d56Sopenharmony_ci ... FOUR = 3 8527db96d56Sopenharmony_ci ... 8537db96d56Sopenharmony_ci Traceback (most recent call last): 8547db96d56Sopenharmony_ci ... 8557db96d56Sopenharmony_ci ValueError: duplicate values found in <enum 'Mistake'>: FOUR -> THREE 8567db96d56Sopenharmony_ci 8577db96d56Sopenharmony_ci.. decorator:: verify 8587db96d56Sopenharmony_ci 8597db96d56Sopenharmony_ci A :keyword:`class` decorator specifically for enumerations. Members from 8607db96d56Sopenharmony_ci :class:`EnumCheck` are used to specify which constraints should be checked 8617db96d56Sopenharmony_ci on the decorated enumeration. 8627db96d56Sopenharmony_ci 8637db96d56Sopenharmony_ci .. versionadded:: 3.11 8647db96d56Sopenharmony_ci 8657db96d56Sopenharmony_ci.. decorator:: member 8667db96d56Sopenharmony_ci 8677db96d56Sopenharmony_ci A decorator for use in enums: its target will become a member. 8687db96d56Sopenharmony_ci 8697db96d56Sopenharmony_ci .. versionadded:: 3.11 8707db96d56Sopenharmony_ci 8717db96d56Sopenharmony_ci.. decorator:: nonmember 8727db96d56Sopenharmony_ci 8737db96d56Sopenharmony_ci A decorator for use in enums: its target will not become a member. 8747db96d56Sopenharmony_ci 8757db96d56Sopenharmony_ci .. versionadded:: 3.11 8767db96d56Sopenharmony_ci 8777db96d56Sopenharmony_ci.. decorator:: global_enum 8787db96d56Sopenharmony_ci 8797db96d56Sopenharmony_ci A decorator to change the :class:`str() <str>` and :func:`repr` of an enum 8807db96d56Sopenharmony_ci to show its members as belonging to the module instead of its class. 8817db96d56Sopenharmony_ci Should only be used when the enum members are exported 8827db96d56Sopenharmony_ci to the module global namespace (see :class:`re.RegexFlag` for an example). 8837db96d56Sopenharmony_ci 8847db96d56Sopenharmony_ci 8857db96d56Sopenharmony_ci .. versionadded:: 3.11 8867db96d56Sopenharmony_ci 8877db96d56Sopenharmony_ci.. function:: show_flag_values(value) 8887db96d56Sopenharmony_ci 8897db96d56Sopenharmony_ci Return a list of all power-of-two integers contained in a flag *value*. 8907db96d56Sopenharmony_ci 8917db96d56Sopenharmony_ci .. versionadded:: 3.11 8927db96d56Sopenharmony_ci 8937db96d56Sopenharmony_ci--------------- 8947db96d56Sopenharmony_ci 8957db96d56Sopenharmony_ciNotes 8967db96d56Sopenharmony_ci----- 8977db96d56Sopenharmony_ci 8987db96d56Sopenharmony_ci:class:`IntEnum`, :class:`StrEnum`, and :class:`IntFlag` 8997db96d56Sopenharmony_ci 9007db96d56Sopenharmony_ci These three enum types are designed to be drop-in replacements for existing 9017db96d56Sopenharmony_ci integer- and string-based values; as such, they have extra limitations: 9027db96d56Sopenharmony_ci 9037db96d56Sopenharmony_ci - ``__str__`` uses the value and not the name of the enum member 9047db96d56Sopenharmony_ci 9057db96d56Sopenharmony_ci - ``__format__``, because it uses ``__str__``, will also use the value of 9067db96d56Sopenharmony_ci the enum member instead of its name 9077db96d56Sopenharmony_ci 9087db96d56Sopenharmony_ci If you do not need/want those limitations, you can either create your own 9097db96d56Sopenharmony_ci base class by mixing in the ``int`` or ``str`` type yourself:: 9107db96d56Sopenharmony_ci 9117db96d56Sopenharmony_ci >>> from enum import Enum 9127db96d56Sopenharmony_ci >>> class MyIntEnum(int, Enum): 9137db96d56Sopenharmony_ci ... pass 9147db96d56Sopenharmony_ci 9157db96d56Sopenharmony_ci or you can reassign the appropriate :meth:`str`, etc., in your enum:: 9167db96d56Sopenharmony_ci 9177db96d56Sopenharmony_ci >>> from enum import Enum, IntEnum 9187db96d56Sopenharmony_ci >>> class MyIntEnum(IntEnum): 9197db96d56Sopenharmony_ci ... __str__ = Enum.__str__ 920