[Python] So erhalten Sie mit Enum einen Wert mit einem anderen Schlüssel als dem Wert

So erhalten Sie mit Enum einen Wert mit einem anderen Schlüssel als dem Wert

Einführung

Viele Programmiersprachen haben so etwas wie Enum. Es ist auch in Python. Sie können jeden "Wert" als Schlüssel erhalten, aber Sie können keinen anderen Wert als Schlüssel erhalten. Ich werde es vorstellen, weil es möglich war, die normale Aufzählung zu erweitern.

Normale Enum-Bestätigung

Lassen Sie uns zunächst überprüfen, wie Enum normal verwendet wird.

>>> from enum import Enum
>>>
>>> class Color(Enum):
...     RED = 1
...     GREEN = 2
...     BLUE = 3

#Wenn Sie Enum wie oben deklarieren
#Sie können auf jedes Mitglied zugreifen, indem Sie einen Wert wie 1 oder 2 als Schlüssel verwenden.

>>> color = Color(1)
>>> print(color)
Color.RED

#Natürlich können Sie auch direkt darauf zugreifen
>>> print(Color.RED)
Color.RED
>>> print(color == Color.RED)
True

Was du machen willst

Sie könnten mit "Farbe (1)" auf "Color.RED" zugreifen, aber wenn Sie beispielsweise mit "Farbe (" rot ")" und "Farbe (" rot ")" zugreifen können, werden die Möglichkeiten von "Aufzählung" erweitert.

>>> from enum import Enum
>>>
>>> class Color(Enum):
...     RED = 1
...     GREEN = 2
...     BLUE = 3

#Natürlich erhalte ich eine Fehlermeldung, wenn ich versuche, wie folgt darauf zuzugreifen
>>> color = Color('red')
Traceback (most recent call last):
  File "<console>", line 1, in <module>
  File "/usr/local/lib/python3.6/enum.py", line 293, in __call__
    return cls.__new__(cls, value)
  File "/usr/local/lib/python3.6/enum.py", line 535, in __new__
    return cls._missing_(value)
  File "/usr/local/lib/python3.6/enum.py", line 548, in _missing_
    raise ValueError("%r is not a valid %s" % (value, cls.__name__))
ValueError: 'red' is not a valid Color

>>> color = Color('rot')
Traceback (most recent call last):
  File "<console>", line 1, in <module>
  File "/usr/local/lib/python3.6/enum.py", line 293, in __call__
    return cls.__new__(cls, value)
  File "/usr/local/lib/python3.6/enum.py", line 535, in __new__
    return cls._missing_(value)
  File "/usr/local/lib/python3.6/enum.py", line 548, in _missing_
    raise ValueError("%r is not a valid %s" % (value, cls.__name__))
ValueError: 'rot' is not a valid Color

Implementierung

Lassen Sie uns nun die Implementierung von Enum überprüfen, die den Schlüssel erweitert.

#Zum Zeitpunkt der Erklärung wie folgt`_value2member_map_`Aktualisieren
>>> from enum import Enum
>>>
>>> class Color(Enum):
...     def __new__(cls, value, en, ja):
...         obj = object.__new__(cls)
...         obj._value_ = value
...         cls._value2member_map_.update({en: obj, ja: obj})
...         return obj
...     RED = (1, 'red', 'rot')
...     GREEN = (2, 'green', 'Grün')
...     BLUE = (3, 'blue', 'Blau')

#Damit wie bisher'red'Oder'rot'Wenn Sie mit zugreifen
>>> color = Color('red')
>>> print(color)
Color.RED

>>> red = Color('rot')
>>> print(red)
Color.RED

Schließlich

Wenn Sie es übertreiben, kann der Schlüssel getragen werden, aber ich denke, es ist wissenswert. Es scheint, dass es mit dem Typ int in der Datenbank und dem Typ str in der API verwendet werden kann.

Recommended Posts

[Python] So erhalten Sie mit Enum einen Wert mit einem anderen Schlüssel als dem Wert
Erste Schritte mit Python
So extrahieren Sie mit Numpy einen anderen als einen bestimmten Index
So erhalten Sie den letzten (letzten) Wert in einer Liste in Python
Wie bekomme ich Stacktrace in Python?
Lesen einer CSV-Datei mit Python 2/3
Zubu Amateur will Python starten
So erhalten Sie den Wert aus dem Parameterspeicher in Lambda (mit Python)
So konvertieren / wiederherstellen Sie einen String mit [] in Python
[Python] Wie zeichnet man mit Matplotlib ein Liniendiagramm?
So erhalten Sie einen angemeldeten Benutzer mit Djangos forms.py
So erhalten Sie mit SQLAlchemy + MySQLdb mehr als 1000 Daten
Wie man mit Python-Flüchen ein Urteil über das Mausrad erhält
[Python] So erstellen Sie mit Matplotlib ein zweidimensionales Histogramm
[Python] Wie zeichnet man mit Matplotlib ein Streudiagramm?
So erhalten Sie mit Python eine Liste der Dateien im selben Verzeichnis
[Einführung in Python] So erhalten Sie den Datenindex mit der for-Anweisung
So installieren Sie NPI + Senden Sie eine Nachricht an Python
So konvertieren Sie mit Python [Anwendung] von einem Array in ein Wörterbuch
Ich habe versucht "Wie man eine Methode in Python dekoriert"
So überprüfen Sie, ob ein Wert in einem Aufzählungstyp vorhanden ist
Erstellen einer Entwicklungsumgebung für die Python2.7-Serie mit Vagrant
So gelangen Sie mit Vagrant in die Python-Entwicklungsumgebung
So verwenden Sie eine andere Datei als .fabricrc als Konfigurationsdatei
[Einführung in Python] So erhalten Sie Daten mit der Funktion listdir
Python: So verwenden Sie Async mit
So erhalten Sie die Python-Version
Wie fange ich mit Scrapy an?
Wie fange ich mit Django an?
So berechnen Sie das Datum mit Python
Führen Sie das Programm aus, ohne eine Python-Umgebung zu erstellen! !! (Erste Schritte mit Google Colaboratory)
Ruft den Wert eines bestimmten Schlüssels bis zum angegebenen Index der Wörterbuchliste in Python ab
Starten eines mit Jupyter Notebook erstellten Python-Programms
[Python 3.8 ~] Wie man rekursive Funktionen mit Lambda-Ausdrücken intelligent definiert
[Python] Ein Memo, das ich versucht habe, mit Asyncio zu beginnen
So erhalten Sie eine Zeichenfolge aus einem Befehlszeilenargument in Python
[Python] So erhalten und ändern Sie Zeilen / Spalten / Werte aus einer Tabelle.
Ich habe versucht, das Entwicklungsstartverfahren von Django kurz zusammenzufassen
[ROS2] So spielen Sie eine Bag-Datei mit Start im Python-Format ab
So senden Sie eine Anfrage mit Python an die DMM (FANZA) -API
So erhalten Sie die Eltern-ID mit sqlalchemy
So fügen Sie ein Paket mit PyCharm hinzu
[Python] Wie man eine Klasse iterierbar macht
[Python] So konvertieren Sie eine zweidimensionale Liste in eine eindimensionale Liste
So arbeiten Sie mit BigQuery in Python
[Python] So invertieren Sie eine Zeichenfolge
Umgang mit Enum-Kompatibilitätsfehlern
Wie man einen Taschentest mit Python macht
So zeigen Sie Python-Japanisch mit Lolipop an
Wie man mit Python-Flüchen Japanisch eingibt
Wie Python-Anfänger mit Progete beginnen
So führen Sie Maya Python-Skripte aus
So installieren Sie Python3 mit Docker Centos
[Python] Was ist ein formales Argument? So stellen Sie den Anfangswert ein
[Yahoo! Weather Replacement Version] So erhalten Sie Wetterinformationen mit LINE Notify + Python