Ich verwende die Enum4-Bibliothek, um eine Enum-Klasse wie folgt zu erstellen:
class Color(Enum):
RED = 1
BLUE = 2
Ich möchte [1, 2]
irgendwo als Liste drucken . Wie kann ich das erreichen?
Sie können IntEnum verwenden :
from enum import IntEnum
class Color(IntEnum):
RED = 1
BLUE = 2
print(int(Color.RED)) # prints 1
So erhalten Sie eine Liste der Ints:
enum_list = list(map(int, Color))
print(enum_list) # prints [1, 2]
a = [(int(v), str(v)) for v in Color]
und dannprint(a)
.[(color.value, color.name) for color in Color]
Sie können Folgendes tun:
quelle
list(Color)
Um Enum mit einem beliebigen Wert zu verwenden, versuchen Sie
Folgendes : Mit einigen Verbesserungen aktualisiert ... Vielen Dank an @Jeff, durch Ihren Tipp!
Als Ergebnis:
quelle
@classmethod
wäre erforderlich, eine Instanz derColor
Klasse zu erstellen . Deshalbstaticmethod
scheint hier die richtige Wahl zu sein.@classmethod
und verwendenreturn list(map(lambda c: c.value, cls))
.Basierend auf der Antwort von @Jeff, überarbeitet, um a zu verwenden,
classmethod
damit Sie denselben Code für jede Ihrer Aufzählungen wiederverwenden können:Produziert:
quelle
Das
Enum
hat also ein__members__
Diktat. Die von @ozgur vorgeschlagene Lösung ist wirklich die beste, aber Sie können dies, was dasselbe tut, mit mehr Arbeit tun[color.value for color_name, color in Color.__members__.items()]
Das
__members__
Wörterbuch könnte nützlich sein, wenn Sie Dinge dynamisch einfügen möchten ... in einer verrückten Situation.[EDIT] Anscheinend
__members__
handelt es sich nicht um ein Wörterbuch, sondern um einen Map-Proxy. Das heißt, Sie können nicht einfach Elemente hinzufügen.Sie können jedoch seltsame Dinge wie tun
MyEnum.__dict__['_member_map_']['new_key'] = 'new_value'
, und dann können Sie den neuen Schlüssel verwenden wieMyEnum.new_key
... aber dies ist nur ein Implementierungsdetail und sollte nicht damit gespielt werden. Schwarze Magie wird mit enormen Wartungskosten bezahlt.quelle
__members__
? Es wäre eine interessante Möglichkeit, Erweiterungen zuzulassen und dadurch neueEnum
Mitglieder zu erstellen . ... übrigens, positiv bewertet, weil ich ein neues ( für mich ) Attribut in die Tabelle aufgenommen habe.Klasse
enum.Enum
ist eine Klasse, die alle Ihre Aufzählungsanforderungen löst. Sie müssen also nur davon erben und Ihre eigenen Felder hinzufügen. Von da an müssen Sie nur noch die Attribute aufrufen:name
&value
:quelle
Verwenden Sie
_member_names_
für ein schnelles einfaches Ergebnis, wenn es nur die Namen sind, dhAußerdem haben Sie
_member_map_
ein geordnetes Wörterbuch der Elemente. Diese Funktion gibt a zurückcollections.OrderedDict
, also haben SieColor._member_names_.items()
undColor._member_names_.values()
zum Spielen. Z.Bgibt alle gültigen Werte von Color zurück
quelle
Sie können die iter () -Funktion verwenden:
quelle