enum — Stöd för uppräkningar¶
Tillagd i version 3.4.
Källkod: Lib/enum.py
En uppräkning:
är en uppsättning symboliska namn (medlemmar) som är bundna till unika värden
kan itereras över för att returnera dess kanoniska (dvs. icke-alias) medlemmar i definitionsordning
använder call-syntax för att returnera medlemmar med värde
använder index-syntax för att returnera medlemmar efter namn
Uppräkningar skapas antingen med hjälp av syntaxen class eller med hjälp av syntaxen för funktionsanrop:
>>> from enum import Enum
>>> # class syntax
>>> class Color(Enum):
... RED = 1
... GREEN = 2
... BLUE = 3
>>> # functional syntax
>>> Color = Enum('Color', [('RED', 1), ('GREEN', 2), ('BLUE', 3)])
Även om vi kan använda class syntax för att skapa Enums, är Enums inte vanliga Python-klasser. Se Hur är Enums annorlunda? för mer information.
Anteckning
Nomenklatur
Klassen
Colorär en enumeration (eller enum)Attributen
Color.RED,Color.GREEN, etc., är enumerationsmedlemmar (eller medlemmar) och är funktionellt konstanter.Enum-medlemmarna har namn och värden (namnet på
Color.REDärRED, värdet påColor.BLUEär3, etc.)
Modulens innehåll¶
typeför Enum och dess underklasser.Basklass för att skapa uppräknade konstanter.
FlaggaBasklass för att skapa uppräknade konstanter som kan kombineras med bitvisa operationer utan att förlora sitt medlemskap i
Flag.En uppräkning med värdena
CONTINUOUS,NAMED_FLAGSochUNIQUE, för användning medverify()för att säkerställa att olika begränsningar uppfylls av en given uppräkning.
FlaggBegränsningEn uppräkning med värdena
STRICT,CONFORM,EJECTochKEEPsom ger möjlighet till mer finkornig kontroll över hur ogiltiga värden hanteras i en uppräkning.Instanser ersätts med ett lämpligt värde för Enum-medlemmar.
StrEnumhar som standard den gemena versionen av medlemsnamnet, medan andra Enum har som standard 1 och ökar därifrån.Tillåter
Enum-medlemmar att ha attribut utan att det står i konflikt med medlemsnamnen. Attributenvalueochnameär implementerade på detta sätt.Enum-klassdekorator som säkerställer att endast ett namn är bundet till ett värde.
verifiera()Enum-klassdekorator som kontrollerar användarvalbara begränsningar för en uppräkning.
medlem()Gör
objtill en medlem. Kan användas som dekorator.
icke-medlem()Gör inte
objtill en medlem. Kan användas som dekorator.
visa_flagg_värden()Returnerar en lista över alla tvåpotenstal som ingår i en flagga.
Tillagd i version 3.6: Flag, IntFlag, auto
Tillagd i version 3.11: StrEnum, EnumCheck, ReprEnum, FlagBoundary, property, member, nonmember, global_enum, show_flag_values
Tillagd i version 3.13: EnumDict
Datatyper¶
- class enum.EnumType¶
EnumType är metaclass för enum-uppräkningar. Det är möjligt att subklassa EnumType – se Subclassing EnumType för detaljer.
EnumTypeär ansvarig för att ställa in rätt__repr__(),__str__(),__format__(), och__reduce__()metoder på den slutliga enum, samt skapa enum medlemmar, korrekt hantering av dubbletter, tillhandahålla iteration över enum klassen, etc.- __call__(cls, value, names=None, *, module=None, qualname=None, type=None, start=1, boundary=None)¶
Denna metod kan användas på två olika sätt:
för att söka upp en befintlig medlem:
- cls:
Den enumklass som anropas.
- värde:
Det värde som ska sökas upp.
för att använda
clsenum för att skapa en ny enum (endast om den befintliga enum inte har några medlemmar):- cls:
Den enumklass som anropas.
- värde:
Namnet på den nya Enum som ska skapas.
- namn:
Namnen/värdena på medlemmarna för det nya Enum.
- modul:
Namnet på den modul som det nya Enum skapas i.
- kvalitetsnamn:
Den faktiska platsen i modulen där denna Enum finns.
- typ:
En mix-in-typ för det nya Enum.
- börja:
Det första heltalsvärdet för Enum (används av
auto).- avgränsning:
Hur man hanterar värden utanför intervallet från bitoperationer (
Flagonly).
- __contains__(cls, member)¶
Returnerar
Trueom medlemmen tillhörcls:>>> some_var = Color.RED >>> some_var in Color True >>> Color.RED.value in Color True
Ändrad i version 3.12: Före Python 3.12 uppstår ett
TypeErrorom en icke-Enum-medlem används i en kontroll av inneslutning.- __dir__(cls)¶
Returnerar
['__class__', '__doc__', '__members__', '__module__']och namnen på medlemmarna i cls:>>> dir(Color) ['BLUE', 'GREEN', 'RED', '__class__', '__contains__', '__doc__', '__getitem__', '__init_subclass__', '__iter__', '__len__', '__members__', '__module__', '__name__', '__qualname__']
- __getitem__(cls, name)¶
Returnerar Enum-medlemmen i cls som matchar namn, eller ger upphov till ett
KeyError:>>> Color['BLUE'] <Color.BLUE: 3>
- __iter__(cls)¶
Returnerar varje medlem i cls i definitionsordning:
>>> list(Color) [<Color.RED: 1>, <Color.GREEN: 2>, <Color.BLUE: 3>]
- __len__(cls)¶
Returnerar antalet medlemmar i cls:
>>> len(Color) 3
- __members__¶
Returnerar en mappning av varje enumnamn till dess medlem, inklusive alias
- __reversed__(cls)¶
Returnerar varje medlem i cls i omvänd definitionsordning:
>>> list(reversed(Color)) [<Color.BLUE: 3>, <Color.GREEN: 2>, <Color.RED: 1>]
- _add_alias_()¶
Lägger till ett nytt namn som alias till en befintlig medlem. Utlöser ett
NameErrorom namnet redan är tilldelat en annan medlem.
- _add_value_alias_()¶
Lägger till ett nytt värde som ett alias till en befintlig medlem. Utlöser ett
ValueErrorom värdet redan är länkat till en annan medlem.
Tillagd i version 3.11: Före 3.11 hette
EnumTypeEnumMeta, vilket fortfarande finns som alias.
- class enum.Enum¶
Enum är basklassen för alla enum-uppräkningar.
- name¶
Det namn som används för att definiera medlemmen
Enum:>>> Color.BLUE.name 'BLUE'
- value¶
Det värde som ges till
Enum-medlemmen:>>> Color.RED.value 1
Värde för medlemmen, kan ställas in i
__new__().Anteckning
Enum-medlemsvärden
Medlemsvärden kan vara vad som helst:
int,str, etc. Om det exakta värdet är oviktigt kan du användaauto-instanser och ett lämpligt värde kommer att väljas åt dig. Seautoför mer information.Även om muterbara/ohashbara värden, som
dict,listeller en muterbardataclass, kan användas, kommer de att ha en kvadratisk prestandapåverkan under skapandet i förhållande till det totala antalet muterbara/ohashbara värden i enum.
- _name_¶
Ledamotens namn.
- _order_¶
Används inte längre, men behålls för bakåtkompatibilitet. (klassattribut, tas bort när klassen skapas).
- _ignore_¶
_ignore_används endast under skapandet och tas bort från uppräkningen när skapandet är klart._ignore_är en lista med namn som inte kommer att bli medlemmar, och vars namn också kommer att tas bort från den färdiga uppräkningen. Se TimePeriod för ett exempel.
- __dir__(self)¶
Returnerar
['__class__', '__doc__', '__module__', 'name', 'value']och alla offentliga metoder som definieras på self.__class__:>>> from datetime import date >>> class Weekday(Enum): ... MONDAY = 1 ... TUESDAY = 2 ... WEDNESDAY = 3 ... THURSDAY = 4 ... FRIDAY = 5 ... SATURDAY = 6 ... SUNDAY = 7 ... @classmethod ... def today(cls): ... print('today is %s' % cls(date.today().isoweekday()).name) ... >>> dir(Weekday.SATURDAY) ['__class__', '__doc__', '__eq__', '__hash__', '__module__', 'name', 'today', 'value']
- _generate_next_value_(name, start, count, last_values)¶
- namn:
Namnet på den medlem som ska definieras (t.ex. ”RED”).
- börja:
Startvärdet för Enum; standardvärdet är 1.
- antal:
Antalet medlemmar som för närvarande är definierade, exklusive denna.
- senaste_värden:
En lista över tidigare värden.
En statisk metod som används för att bestämma nästa värde som returneras av
auto:>>> from enum import auto >>> class PowersOfThree(Enum): ... @staticmethod ... def _generate_next_value_(name, start, count, last_values): ... return 3 ** (count + 1) ... FIRST = auto() ... SECOND = auto() ... >>> PowersOfThree.SECOND.value 9
- __init__(self, *args, **kwds)¶
Som standard gör den ingenting. Om flera värden anges i medlemstilldelningen, blir dessa värden separata argument till
__init__; t.ex.>>> from enum import Enum >>> class Weekday(Enum): ... MONDAY = 1, 'Mon'
Weekday.__init__()skulle kallas somWeekday.__init__(self, 1, 'Mon')
- __init_subclass__(cls, **kwds)¶
En klassmetod som används för att ytterligare konfigurera efterföljande underklasser. Som standard gör den ingenting.
- _missing_(cls, value)¶
En klassmetod för att leta upp värden som inte finns i cls. Som standard gör den ingenting, men kan åsidosättas för att implementera anpassat sökbeteende:
>>> from enum import StrEnum >>> class Build(StrEnum): ... DEBUG = auto() ... OPTIMIZED = auto() ... @classmethod ... def _missing_(cls, value): ... value = value.lower() ... for member in cls: ... if member.value == value: ... return member ... return None ... >>> Build.DEBUG.value 'debug' >>> Build('deBUG') <Build.DEBUG: 'debug'>
- __new__(cls, *args, **kwds)¶
Existerar inte som standard. Om det anges, antingen i enum-klassdefinitionen eller i en mixin-klass (t.ex.
int), kommer alla värden som anges i medlemstilldelningen att skickas; t.ex.>>> from enum import Enum >>> class MyIntEnum(int, Enum): ... TWENTYSIX = '1a', 16
resulterar i anropet
int('1a', 16)och ett värde på26för medlemmen.Anteckning
När du skriver en egen
__new__ska du inte användasuper().__new__- anropa istället lämplig__new__.
- __repr__(self)¶
Returnerar den sträng som används för repr()-anrop. Som standard returneras Enum-namnet, medlemsnamnet och värdet, men kan åsidosättas:
>>> class OtherStyle(Enum): ... ALTERNATE = auto() ... OTHER = auto() ... SOMETHING_ELSE = auto() ... def __repr__(self): ... cls_name = self.__class__.__name__ ... return f'{cls_name}.{self.name}' ... >>> OtherStyle.ALTERNATE, str(OtherStyle.ALTERNATE), f"{OtherStyle.ALTERNATE}" (OtherStyle.ALTERNATE, 'OtherStyle.ALTERNATE', 'OtherStyle.ALTERNATE')
- __str__(self)¶
Returnerar den sträng som används för str()-anrop. Som standard returneras Enum-namnet och medlemsnamnet, men kan åsidosättas:
>>> class OtherStyle(Enum): ... ALTERNATE = auto() ... OTHER = auto() ... SOMETHING_ELSE = auto() ... def __str__(self): ... return f'{self.name}' ... >>> OtherStyle.ALTERNATE, str(OtherStyle.ALTERNATE), f"{OtherStyle.ALTERNATE}" (<OtherStyle.ALTERNATE: 1>, 'ALTERNATE', 'ALTERNATE')
- __format__(self)¶
Returnerar strängen som används för format() och f-string-anrop. Returnerar som standard
__str__()returvärde, men kan åsidosättas:>>> class OtherStyle(Enum): ... ALTERNATE = auto() ... OTHER = auto() ... SOMETHING_ELSE = auto() ... def __format__(self, spec): ... return f'{self.name}' ... >>> OtherStyle.ALTERNATE, str(OtherStyle.ALTERNATE), f"{OtherStyle.ALTERNATE}" (<OtherStyle.ALTERNATE: 1>, 'OtherStyle.ALTERNATE', 'ALTERNATE')
Ändrad i version 3.12: Lagt till Stöd för dataklasser
- class enum.IntEnum¶
IntEnum är samma sak som
Enum, men dess medlemmar är också heltal och kan användas var som helst där ett heltal kan användas. Om någon heltalsoperation utförs med en IntEnum-medlem förlorar det resulterande värdet sin uppräkningsstatus.>>> from enum import IntEnum >>> class Number(IntEnum): ... ONE = 1 ... TWO = 2 ... THREE = 3 ... >>> Number.THREE <Number.THREE: 3> >>> Number.ONE + Number.TWO 3 >>> Number.THREE + 5 8 >>> Number.THREE == 3 True
Ändrad i version 3.11:
__str__()är nuint.__str__()för att bättre stödja användningsfallet ersättning av befintliga konstanter.__format__()var redanint.__format__()av samma anledning.
- class enum.StrEnum¶
StrEnum är samma sak som
Enum, men dess medlemmar är också strängar och kan användas på de flesta av de ställen där en sträng kan användas. Resultatet av en strängoperation som utförs på eller med en StrEnum-medlem är inte en del av uppräkningen.>>> from enum import StrEnum, auto >>> class Color(StrEnum): ... RED = 'r' ... GREEN = 'g' ... BLUE = 'b' ... UNKNOWN = auto() ... >>> Color.RED <Color.RED: 'r'> >>> Color.UNKNOWN <Color.UNKNOWN: 'unknown'> >>> str(Color.UNKNOWN) 'unknown'
Anteckning
Det finns ställen i stdlib som kontrollerar för en exakt
stristället för enstrunderklass (t.ex.type(unknown) == stristället förisinstance(unknown, str)), och på dessa ställen måste du användastr(MyStrEnum.MY_MEMBER).Anteckning
__str__()ärstr.__str__()för att bättre stödja användningsfallet ersättning av befintliga konstanter.__format__()är likasåstr.__format__()av samma anledning.Tillagd i version 3.11.
- class enum.Flag¶
Flagär samma sak somEnum, men dess medlemmar stöder de bitvisa operatorerna&(AND),|(OR),^(XOR) och~(INVERT); resultaten av dessa operationer är (alias för) medlemmar i uppräkningen.- __contains__(self, value)¶
Returnerar True om värdet finns i self:
>>> from enum import Flag, auto >>> class Color(Flag): ... RED = auto() ... GREEN = auto() ... BLUE = auto() ... >>> purple = Color.RED | Color.BLUE >>> white = Color.RED | Color.GREEN | Color.BLUE >>> Color.GREEN in purple False >>> Color.GREEN in white True >>> purple in white True >>> white in purple False
- __iter__(self):
Returnerar alla ingående icke-alias-medlemmar:
>>> list(Color.RED) [<Color.RED: 1>] >>> list(purple) [<Color.RED: 1>, <Color.BLUE: 4>]
Tillagd i version 3.11.
- __len__(self):
Returnerar antalet medlemmar i flag:
>>> len(Color.GREEN) 1 >>> len(white) 3
Tillagd i version 3.11.
- __bool__(self):
Returnerar True om några medlemmar i flaggan, False annars:
>>> bool(Color.GREEN) True >>> bool(white) True >>> black = Color(0) >>> bool(black) False
- __or__(self, other)¶
Returnerar aktuell flagga binärt eller’ed med andra:
>>> Color.RED | Color.GREEN <Color.RED|GREEN: 3>
- __and__(self, other)¶
Returnerar aktuell flagga binärt och’ed med andra:
>>> purple & white <Color.RED|BLUE: 5> >>> purple & Color.GREEN <Color: 0>
- __xor__(self, other)¶
Returnerar aktuell flagga binärt xor’ed med andra:
>>> purple ^ white <Color.GREEN: 2> >>> purple ^ Color.GREEN <Color.RED|GREEN|BLUE: 7>
- __invert__(self):
Returnerar alla flaggor i type(self) som inte finns i self:
>>> ~white <Color: 0> >>> ~purple <Color.GREEN: 2> >>> ~Color.RED <Color.GREEN|BLUE: 6>
- _numeric_repr_()¶
Funktion som används för att formatera eventuella återstående icke namngivna numeriska värden. Standard är värdets repr; vanliga val är
hex()ochoct().
Ändrad i version 3.11: repr() för nollvärdesflaggor har ändrats. Det är det nu:
>>> Color(0) <Color: 0>
- class enum.IntFlag¶
IntFlagär samma sak somFlag, men dess medlemmar är också heltal och kan användas överallt där ett heltal kan användas.>>> from enum import IntFlag, auto >>> class Color(IntFlag): ... RED = auto() ... GREEN = auto() ... BLUE = auto() ... >>> Color.RED & 2 <Color: 0> >>> Color.RED | 2 <Color.RED|GREEN: 3>
Om en heltalsoperation utförs med en IntFlag-medlem är resultatet inte en IntFlag:
>>> Color.RED + 2 3
Om en
Flag-operation utförs med en IntFlag-medlem och:resultatet är en giltig IntFlag: en IntFlag returneras
resultatet är inte en giltig IntFlag: resultatet beror på inställningen
FlagBoundary
repr()av icke namngivna nollvärderade flaggor har ändrats. Den är nu:>>> Color(0) <Color: 0>
Ändrad i version 3.11:
__str__()är nuint.__str__()för att bättre stödja användningsfallet ersättning av befintliga konstanter.__format__()var redanint.__format__()av samma anledning.Inversion av en
IntFlagreturnerar nu ett positivt värde som är en sammanslagning av alla flaggor som inte ingår i den givna flaggan, istället för ett negativt värde. Detta matchar det befintligaFlag-beteendet.
- class enum.ReprEnum¶
ReprEnumanvänderrepr()avEnum, menstr()av den blandade datatypen:Ärv från
ReprEnumför att behållastr()/format()för den blandade datatypen istället för att användaEnum-standardstr().Tillagd i version 3.11.
- class enum.EnumCheck¶
EnumCheck innehåller de alternativ som används av
verify()-dekoratorn för att säkerställa olika begränsningar; misslyckade begränsningar resulterar i ettValueError.- UNIQUE¶
Se till att varje värde bara har ett namn:
>>> from enum import Enum, verify, UNIQUE >>> @verify(UNIQUE) ... class Color(Enum): ... RED = 1 ... GREEN = 2 ... BLUE = 3 ... CRIMSON = 1 Traceback (most recent call last): ... ValueError: aliases found in <enum 'Color'>: CRIMSON -> RED
- CONTINUOUS¶
Se till att det inte saknas några värden mellan den lägst värderade medlemmen och den högst värderade medlemmen:
>>> from enum import Enum, verify, CONTINUOUS >>> @verify(CONTINUOUS) ... class Color(Enum): ... RED = 1 ... GREEN = 2 ... BLUE = 5 Traceback (most recent call last): ... ValueError: invalid enum 'Color': missing values 3, 4
- NAMED_FLAGS¶
Se till att alla flagggrupper/masker endast innehåller namngivna flaggor – användbart när värden anges istället för att genereras av
auto():>>> from enum import Flag, verify, NAMED_FLAGS >>> @verify(NAMED_FLAGS) ... class Color(Flag): ... RED = 1 ... GREEN = 2 ... BLUE = 4 ... WHITE = 15 ... NEON = 31 Traceback (most recent call last): ... ValueError: invalid Flag 'Color': aliases WHITE and NEON are missing combined values of 0x18 [use enum.show_flag_values(value) for details]
Anteckning
CONTINUOUS och NAMED_FLAGS är utformade för att fungera med heltalsvärderade medlemmar.
Tillagd i version 3.11.
- class enum.FlagBoundary¶
FlagBoundarystyr hur värden utanför intervallet hanteras iFlagoch dess underklasser.- STRICT¶
Värden utanför intervallet ger upphov till ett
ValueError. Detta är standardvärdet förFlag:>>> from enum import Flag, STRICT, auto >>> class StrictFlag(Flag, boundary=STRICT): ... RED = auto() ... GREEN = auto() ... BLUE = auto() ... >>> StrictFlag(2**2 + 2**4) Traceback (most recent call last): ... ValueError: <flag 'StrictFlag'> invalid value 20 given 0b0 10100 allowed 0b0 00111
- CONFORM¶
Värden utanför intervallet har ogiltiga värden borttagna, vilket lämnar ett giltigt
Flag-värde:>>> from enum import Flag, CONFORM, auto >>> class ConformFlag(Flag, boundary=CONFORM): ... RED = auto() ... GREEN = auto() ... BLUE = auto() ... >>> ConformFlag(2**2 + 2**4) <ConformFlag.BLUE: 4>
- EJECT¶
Värden utanför intervallet förlorar sitt medlemskap i
Flagoch återgår tillint.>>> from enum import Flag, EJECT, auto >>> class EjectFlag(Flag, boundary=EJECT): ... RED = auto() ... GREEN = auto() ... BLUE = auto() ... >>> EjectFlag(2**2 + 2**4) 20
- KEEP¶
Värden utanför intervallet behålls och medlemskapet i
Flagbehålls. Detta är standardinställningen förIntFlag:>>> from enum import Flag, KEEP, auto >>> class KeepFlag(Flag, boundary=KEEP): ... RED = auto() ... GREEN = auto() ... BLUE = auto() ... >>> KeepFlag(2**2 + 2**4) <KeepFlag.BLUE|16: 20>
Tillagd i version 3.11.
- class enum.EnumDict¶
EnumDict är en subklass av
dictsom används som namnrymd för att definiera enumklasser (se Förbereda klassens namnrymd). Den är exponerad för att tillåta subklasser avEnumTypemed avancerat beteende som att ha flera värden per medlem. Den bör anropas med namnet på den enumklass som skapas, annars kommer privata namn och interna klasser inte att hanteras korrekt.Observera att endast gränssnittet
MutableMapping(__setitem__()ochupdate()) åsidosätts. Det kan vara möjligt att kringgå kontrollerna genom att använda andradict-operationer som|=.- member_names¶
En lista med medlemmarnas namn.
Tillagd i version 3.13.
Namn som stöds för __dunder__¶
__members__ är en skrivskyddad ordnad mappning av member_name:member objekt. Den är endast tillgänglig för klassen.
__new__(), om det anges, måste skapa och returnera enum-medlemmarna; det är också en mycket bra idé att ställa in medlemmens _value_ på lämpligt sätt. När alla medlemmar är skapade används den inte längre.
Namn med stöd för _sunder_¶
_add_alias_()– lägger till ett nytt namn som alias till en befintlig medlem._add_value_alias_()– lägger till ett nytt värde som ett alias till en befintlig medlem._name_– namnet på medlemmen_value_– medlemmens värde; kan ställas in i__new___missing_()– en uppslagningsfunktion som används när ett värde inte hittas; kan åsidosättas_ignore_– en lista med namn, antingen som enlisteller enstr, som inte kommer att omvandlas till medlemmar och som kommer att tas bort från den slutliga klassen_order_– används inte längre, behålls för bakåtkompatibilitet (klassattribut, tas bort när klassen skapas)_generate_next_value_()– används för att få ett lämpligt värde för en enum-medlem; kan åsidosättasÄven om
_sunder_-namn i allmänhet är reserverade för vidareutveckling av klassenEnumoch inte kan användas, är vissa uttryckligen tillåtna:_repr_*(t.ex._repr_html_), som används i IPythons rika display
Tillagd i version 3.6: _missing_, _order_, _generate_next_value_
Tillagd i version 3.7: _ignore_
Tillagd i version 3.13: _add_alias_, _add_value_alias_, _repr_*
Verktyg och dekoratörer¶
- class enum.auto¶
auto kan användas i stället för ett värde. Om det används kommer Enum-maskineriet att anropa
Enum:s_generate_next_value_()för att få ett lämpligt värde. FörEnumochIntEnumkommer det lämpliga värdet att vara det sista värdet plus ett; förFlagochIntFlagkommer det att vara den första tvåpotensen större än det högsta värdet; förStrEnumkommer det att vara den gemena versionen av medlemmens namn. Försiktighet måste iakttas om auto() blandas med manuellt angivna värden.auto-instanser löses endast när de befinner sig på den högsta nivån i ett uppdrag:
FIRST = auto()kommer att fungera (auto() ersätts med1);SECOND = auto(), -2kommer att fungera (auto ersätts med2, så2, -2används för att skapa enummedlemmenSECOND;THREE = [auto(), -3]kommer inte att fungera (<auto instance>, -3används för att skapa enummedlemmenTHREE)
Ändrad i version 3.11.1: I tidigare versioner var
auto()tvungen att vara det enda på tilldelningsraden för att fungera korrekt._generate_next_value_kan åsidosättas för att anpassa de värden som används av auto.Anteckning
i 3.13 kommer standardinställningen
_generate_next_value_alltid att returnera det högsta medlemsvärdet ökat med 1, och kommer att misslyckas om någon medlem är en inkompatibel typ.
- @enum.property¶
En dekorator som liknar den inbyggda property, men som är specifik för uppräkningar. Den gör det möjligt för medlemsattribut att ha samma namn som medlemmarna själva.
Anteckning
egenskapen och medlemmen måste definieras i separata klasser; till exempel definieras attributen värde och namn i klassen Enum, och underklasser till Enum kan definiera medlemmar med namnen
värdeochnamn.Tillagd i version 3.11.
- @enum.unique¶
En
class-dekorator speciellt för uppräkningar. Den söker igenom en uppräknings__members__och samlar in alla alias som den hittar; om några hittasValueErrorskapas med detaljerna:>>> from enum import Enum, unique >>> @unique ... class Mistake(Enum): ... ONE = 1 ... TWO = 2 ... THREE = 3 ... FOUR = 3 ... Traceback (most recent call last): ... ValueError: duplicate values found in <enum 'Mistake'>: FOUR -> THREE
- @enum.verify¶
En
class-dekorator speciellt för uppräkningar. Medlemmar frånEnumCheckanvänds för att ange vilka begränsningar som ska kontrolleras på den dekorerade uppräkningen.Tillagd i version 3.11.
- @enum.member¶
En dekorator för användning i enumer: dess mål blir en medlem.
Tillagd i version 3.11.
- @enum.nonmember¶
En dekorator för användning i enumer: dess mål kommer inte att bli medlem.
Tillagd i version 3.11.
- @enum.global_enum¶
En dekorator för att ändra
str()ochrepr()för ett enum så att dess medlemmar visas som tillhörande modulen istället för dess klass. Bör endast användas när enum-medlemmarna exporteras till modulens globala namnrymd (sere.RegexFlagför ett exempel).Tillagd i version 3.11.
- enum.show_flag_values(value)¶
Returnerar en lista med alla tvåpotenstal som ingår i flaggan value.
Tillagd i version 3.11.
Anteckningar¶
Dessa tre enumtyper är utformade för att ersätta befintliga heltals- och strängbaserade värden, och de har därför extra begränsningar:
__str__använder värdet och inte namnet på enum-medlemmeneftersom
__format__använder__str__använder den också värdet på enum-medlemmen i stället för dess namnOm du inte behöver/vill ha dessa begränsningar kan du antingen skapa din egen basklass genom att själv blanda in typen
intellerstr:>>> from enum import Enum >>> class MyIntEnum(int, Enum): ... passeller så kan du omfördela lämplig
str(), etc., i din enum:>>> from enum import Enum, IntEnum >>> class MyIntEnum(IntEnum): ... __str__ = Enum.__str__