Verwenden der neuen Enum-Funktion (über Backport enum34 ) mit Python 2.7.6.
Wie kann ich angesichts der folgenden Definition ein int in den entsprechenden Enum-Wert konvertieren?
from enum import Enum
class Fruit(Enum):
Apple = 4
Orange = 5
Pear = 6
Ich weiß, dass ich eine Reihe von if-Anweisungen von Hand erstellen kann, um die Konvertierung durchzuführen, aber gibt es eine einfache pythonische Methode zum Konvertieren? Grundsätzlich möchte ich eine Funktion ConvertIntToFruit (int), die einen Aufzählungswert zurückgibt.
Mein Anwendungsfall ist, dass ich eine CSV-Datei mit Datensätzen habe, in der ich jeden Datensatz in ein Objekt einlese. Eines der Dateifelder ist ein ganzzahliges Feld, das eine Aufzählung darstellt. Während ich das Objekt auffülle, möchte ich dieses ganzzahlige Feld aus der Datei in den entsprechenden Enum-Wert im Objekt konvertieren.
quelle
Fruit['Orange']
.convert
,coerce
undcast
aber nichts getroffen. Sieht aus wie die Magie waraccess enum members by name, use item access
. Perfecto, vielen Dank, ich werde meinen Code mit dieser Syntax bereinigen."foobar" in Fruit.__members__
, um die Mitgliedschaft zu testen und sogar abzureißenFruit.get( 'foobar', Fruit.Orange )
, um das Standard-Enum-Aroma zu erhalten. Mein Code sieht viel einfacher aus, wenn ich all diese Zubehör-Suchgerüste entferne, die ich zuvor angelegt habe.Ich denke, es ist in einfachen Worten, den
int
WertEnum
durch Aufrufen umzuwandelnEnumType(int_value)
, danach Zugriffname
auf dasEnum
Objekt:Oder als Funktion:
quelle
Ich wollte etwas Ähnliches, damit ich von einer einzelnen Referenz aus auf jeden Teil des Wertepaars zugreifen kann. Die Vanille-Version:
Der Fehler löst erwartungsgemäß eine Ausnahme aus.
Eine robustere Version:
Bei nicht korrekter Verwendung wird dadurch vermieden, dass eine Ausnahme erstellt wird, und stattdessen wird eine Fehleranzeige zurückgegeben. Ein pythonischerer Weg, dies zu tun, wäre, "Keine" zurückzugeben, aber meine spezielle Anwendung verwendet den Text direkt.
quelle
__int__
und__str__
in einer Enum-Instanz definieren?